0

私はWindows Mobile 6の初心者で、値をデータベースに渡そうとしていますが、動作していません。エラーや警告はありません。コードを確認して助けてください..データベースが更新されていません..

private void button1_Click(object sender, EventArgs e)
{
  string conSTR = "data source= " +
    (System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)) +
    "\\DPass.sdf; Persist security info=False";


  SqlCeConnection connection = new SqlCeConnection(conSTR);
  SqlCeCommand cmd = new SqlCeCommand("INSERT INTO cusTable(Fname,Lname) VALUES(@Fname,@Lname)",connection);
  cmd.Parameters.AddWithValue("@Fname", textBox1.Text);
  cmd.Parameters.AddWithValue("@Lname", textBox2.Text);

  connection.Open();
  int affectedRows = cmd.ExecuteNonQuery();
  cmd.ExecuteNonQuery();
  MessageBox.Show("ela");
  connection.Close();
}
4

2 に答える 2

1

解決策の一部ではありませんが、これをループの外に移動して、これを何度も読む必要がないようにすることをお勧めします。

private readonly string CON_STR = "data source= " +
    (System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)) +
    "\\DPass.sdf; Persist security info=False";

ここで、Try/Catch ステートメントを使用して、何が間違っていたかを調べます。

以下の変更されたコードには、これらのうちの 2 つが含まれています。外側の Try/Catch は に設定されException、すべての例外を飲み込みます。内部の Try/Catch は、メッセージをスローすると思われるものであり、SqlCeExceptionSqlCe エラーに対してのみスローされる です。

private void button1_Click(object sender, EventArgs e)
{
   int affectedRows = 0;
   string sqlText = "INSERT INTO cusTable(Fname,Lname) VALUES(@Fname,@Lname)";
   try {
     using (var cmd = new SqlCeCommand(sqlText, new SqlCeConnection(CON_STR))) {
       cmd.Parameters.AddWithValue("@Fname", textBox1.Text);
       cmd.Parameters.AddWithValue("@Lname", textBox2.Text);
       try {
         cmd.Connection.Open();
         affectedRows = cmd.ExecuteNonQuery();
         //cmd.ExecuteNonQuery(); <= ?? Why are you calling this twice?
       } catch (SqlCeException ceEr) {
         MessageBox.Show(ceEr.Message, "SqlCe Error");
       } finally {
         cmd.Connection.Close();
       }
     }
   } catch (Exception err) {
     MessageBox.Show(err.Message, "Non-SqlCe Error");
   }
   MessageBox.Show(string.Format("Affected Rows: {0}", affectedRows), "ela");
}

また、INSERT関数を 2 回ExecuteNonQuery()呼び出しているように見えたため、2 回目の呼び出しはコメント アウトされています。

このコードを実行し、エラー メッセージの内容と、その MessageBox のタイトルが「SqlCe エラー」または「Non-SqlCe エラー」のどちらであるかを報告します。

于 2012-11-17T14:45:54.597 に答える
0

SQL CE データベースにデータを挿入する方法はまだ使用していませんが、クエリ文字列にいくつかの項目が欠けているようです。http://msdn.microsoft.com/en-us/library/aa977880%28v=vs.71%29.aspxを見ると、次の構文を使用していることがわかります。

INSERT INTO employee (emp_no, fname, lname, officeno) ;VALUES (3022, "John", "Smith", 2101)

しかし、クエリでは、フィールド リストの後にセミコロンがありません。

第二に、データベースに文字列情報を挿入する必要がある場合は、これらを引用符で囲む必要があります。

したがって、次のクエリ文字列を試してください。

"INSERT INTO cusTable(Fname,Lname); VALUES(\"@Fname\",\"@Lname\")"

ところで: コード内の SQL ステートメントが機能しない場合は、MS Access または SQL Manager を使用してクエリ文字列をテストします。

よろしく

ヨーゼフ

于 2012-11-17T07:01:16.470 に答える