2012-11-16 23 views
0

我是初学者的Windows Mobile 6和IAM试图值传递给数据库,但伊茨不工作,没有错误和警告,请检查我的代码,并帮助我..数据库没有更新..插入数据到数据库中的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(); 
} 

回答

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

+1

@ jp2codem我试图在你的方式。有没有错误,但仍然无法执行所有代码最终消息框也来了,但数据库表不更新..帮助我,请非常感谢你 – Nick

+0

我做了一个小的编辑,添加'string.Format(“受影响的行:{ 0}“,affectedRows)'代码到消息框中。如果这返回值为1,那么数据库正在更新。如果你没有看到更新,你可能会检查错误的数据库。 (它发生) – jp2code

+0

yeez你是正确的...数据库正在更新里面emulater .. 非常感谢你帮助我.. :) – Nick

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) 

但在查询中的分号字段列表后失踪。其次,如果你需要插入字符串信息一个分贝,这些必须被引号包围。

所以请尝试follwoing查询字符串:

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

BTW:如果有事情和SQL语句中的代码不起作用,我用MS Access或SQL管理器来测试我的查询字符串。

问候

约瑟夫

+0

号,分号绝对是一个语法错误 – ctacke

+0

谢谢你对我的帮助 – Nick