在windows mobile 6中将数据插入数据库

时间:2012-11-16 06:27:08

标签: windows-mobile compact-framework sql-server-ce

我是Windows Mobile 6的初学者,iam尝试将值传递给数据库但是它没有工作没有错误和警告请检查我的代码并帮助我..数据库没有更新..

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();
}

2 个答案:

答案 0 :(得分: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 Error”还是“Non-SqlCe Error”。

答案 1 :(得分: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)

但是在您的查询中,字段列表后面缺少分号。

其次,如果您需要插入字符串info a db,则必须用引号括起来。

所以请尝试下面的查询字符串:

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

BTW:如果代码中带有SQL语句的内容不起作用,我使用MS Access或SQL Manager来测试我的查询字符串。

问候

约瑟夫