2013-02-05 81 views
0

我真的不能在我的数据库中添加任何数据,我可以读取数据库上的内容,但无法写入,我尝试了很多代码,但没有工作:(我结束了这段代码,使用微软访问在数据库中添加数据

private void button1_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       string user = textBox1.Text; 
       string pass = textBox2.Text; 

       string myExecutequery = "INSERT INTO Accountstbl (Username,Password) VALUES (@user,@pass)"; 
       OleDbCommand cmd = new OleDbCommand(myExecutequery, con); 
       cmd.Connection.Open(); 
       cmd.ExecuteNonQuery(); 
       con.Close(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.ToString()); 
      } 
     } 

错误说:

System.Data.OleDb.OleDbException: Syntax error in INSERT INTO statement. 
    at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) 
    at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) 
    at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) 
    at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) 
    at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) 
    at System.Data.OleDb.OleDbCommand.ExecuteNonQuery() 
    at VirginiTEAcorp.Form3.button1_Click(Object sender, EventArgs e) in C:\Documents and Settings\12-014s\My Documents\applications\Database\WindowsFormsApplication1\Form3.cs:line 31 

有人帮我请:(

+2

一个错误,你需要添加参数通过使用cmd.Parameters.AddWithValues(??,参数值)或 'cmd.Parameters.AddWithValue(@user,user)' 'cmd.Parametes.AddWithValue(@pass,pass)' – MethodMan

+0

试试这个http: //小号ocial.msdn.microsoft.com/Forums/en-ZA/csharpgeneral/thread/52293d38-931d-40a6-8999-ca74d5a0fb8f – 2013-02-05 04:51:13

回答

0
string myExecutequery = "INSERT INTO Accountstbl (Username,Password) VALUES 
(@user,@pass)"; 

con.Open(); 

try 
{ 
OleDbCommand cmd = new OleDbCommand(myExecutequery, con); 
cmd.Parameters.Add("@user", user); 
cmd.Parameters.Add("@pass", pass);  
cmd.ExecuteNonQuery(); 
cmd.Dispose(); 
cmd = null; 
} 
catch(Exception ex) 
{ 
    throw new Exception(ex.ToString(), ex); 
} 
finally 
{ 
con.Close(); 
} 

您的查询应该是这样的

string myExecutequery = "INSERT INTO Accountstbl (Username,Password) VALUES 
('"+ user +"','"+ pass +"')"; 

而你需要打开连接它也加入到的OleDbCommand

con.Open(); 
+0

有一个更好的方法做插入..我会建议使用参数化查询在你的情况然而因为它的'CRAPCESS'可以工作..如果它是Sql Server,你有什么将是一个糟糕的解决方案,因为OP如何将他的查询设置为它为Sql Injection设置的TextBox条目 – MethodMan

+0

如果值在文本框?我怎么能这样做,如果我使用VALUE(“'”+ textBox1.text +“'”,textBox1.text) – Pyromancer

0

之前试试看吧。

 string SqlString = "Insert Into Accountstbl (Username, Password) Values (@user, @pass)"; 
     using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\test.accdb")) //Your Connection string 
     { 
      using (OleDbCommand cmd = new OleDbCommand(SqlString, conn)) 
      { 
       string use = userTextBox.Text; 
       string pass = passTextBox.Text; 
       cmd.CommandType = CommandType.Text; 
       cmd.Parameters.AddWithValue("@use", use); 
       cmd.Parameters.AddWithValue("@pass", pass); 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
     } 

我知道这应该是工作,但我在Microsoft Access 2012测试此代码,我得到这个错误:

Syntax error in INSERT INTO statement. 

这将是MSAccessBUG: "Syntax Error in INSERT INTO..." on ADO Recordset.Update

+0

Spajce,你为什么硬编码值在你的例子中传递适当的参数本cmd.Parameters.AddWithValue( “@use”,“test”); cmd.Parameters.AddWithValue(“@ pass”,“test1”);应该是'cmd.Parameters.AddWithValue(“@ use”,user);' 'cmd.Parameters.AddWithValue(“@ pass”,pass);' – MethodMan

+0

我道歉我会修改我的答案..':)'' – spajce