0

我是 windows mobile 6 的初学者,我试图将值传递给数据库,但 itz 不工作没有错误和警告请检查我的代码并帮助我.. 数据库没有更新..

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 是我怀疑会抛出消息的那个,它是一个SqlCeException,仅针对 SqlCe 错误抛出。

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两次调用了您的函数,因此第二次ExecuteNonQuery()调用已被注释掉。

运行此代码,并报告错误消息是什么以及该 MessageBox 的标题是“SqlCe 错误”还是“非 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 回答