OleDB INSERT 命令错误
Posted
技术标签:
【中文标题】OleDB INSERT 命令错误【英文标题】:OleDB INSERT command error 【发布时间】:2013-01-27 13:06:16 【问题描述】:我有一个数据库(我使用 MS ACCESS)我有这个插入代码,我可以读取数据但写入时出错,我按照说明进行操作但它不起作用 这是我的代码
OleDbConnection con = new OleDbConnection(@" provider=Microsoft.ace.Oledb.12.0; data source=\\sisc-erelim\4_Printing\VTDB\DB\VirginiTEADB2.accdb; Persist Security Info=False");
private void button1_Click(object sender, EventArgs e)
try
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT INTO Accountstbl (Username, Password)" + "VALUES ('" + textBox1.Text + "','" + textBox2.Text + "')";
cmd.Parameters.AddWithValue("@Username", textBox1.Text);
cmd.Parameters.AddWithValue("@Password", textBox2.Text);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
catch (Exception ex)
textBox1.Text = 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 34
【问题讨论】:
调试的时候,调用ExecuteNonQuery()
之前cmd.CommandText
的值是多少?
【参考方案1】:
尝试改变这种方式
cmd.CommandText = "INSERT INTO Accountstbl (Username, Password) VALUES (@Username,@Password)";
【讨论】:
【参考方案2】:插入语句中需要一个空格:
ssword)" + "VALUES ('"
例如,在您的语句中,您在不留空格的情况下进行了连接。
应该是:
ssword)" + " VALUES ('"
例如。
【讨论】:
【参考方案3】:您定义了 @Username
和 @Password
参数,但您从未在 sql 命令中使用过。
怎么样?
cmd.CommandText = "INSERT INTO Accountstbl (Username, [Password]) VALUES (@Username, @Password)";
cmd.Parameters.AddWithValue("@Username", textBox1.Text);
cmd.Parameters.AddWithValue("@Password", textBox2.Text);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
您还应该在您的 sql 命令(如 [Password]
)中使用方括号中的 Password
,因为它是 MS Access 中的 reserved keyword
。
如果你不这样做,可能会导致类似的错误;
关键字“密码”附近的语法不正确
【讨论】:
@AlfredSanz 很高兴听到这个消息。【参考方案4】:你可以拥有这个:
cmd.CommandText = "INSERT INTO Accountstbl (Username, [Password]) VALUES (@Username,@Password)";
cmd.Parameters.AddWithValue("@Username", textBox1.Text);
cmd.Parameters.AddWithValue("@Password", textBox2.Text);
我希望这会奏效。
振作起来。
【讨论】:
以上是关于OleDB INSERT 命令错误的主要内容,如果未能解决你的问题,请参考以下文章
C# - INSERT INTO 语句中的语法错误(System.Data.dll 中发生“System.Data.OleDb.OleDbException”类型的未处理异常)