【发布时间】:2014-04-27 18:00:32
【问题描述】:
当我点击添加按钮插入新书时,在 cmd.ExecuteNonQuery(); 处出现错误INSERT INTO 语句中的语法错误。我错过了什么吗?
protected void btnAddBook_Click(object sender, EventArgs e)
{
string connect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|Bookdb.accdb";
using (OleDbConnection conn = new OleDbConnection(connect))
{
OleDbCommand cmd = new OleDbCommand("INSERT INTO Books (Title, Author, Price, Edition) VALUES (@Title, @Author, @Price, @Edition)");
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
cmd.Parameters.AddWithValue("@Title", TextBox1.Text);
cmd.Parameters.AddWithValue("@Author", TextBox2.Text);
cmd.Parameters.AddWithValue("@Price", TextBox3.Text);
cmd.Parameters.AddWithValue("@Edition", TextBox4.Text);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
【问题讨论】:
-
如果我没记错的话,OleDb 参数不应该在字符串中命名,只是用
?标记并以相同的顺序添加到参数列表中。new OleDbCommand("INSERT INTO Books (Title, Author, Price, Edition) VALUES (?,?,?,?)"); -
这很奇怪,您的代码和命令文本似乎是正确的。当您连接到 Access 数据库时,也接受参数占位符,虽然不是 OleDb 预期的形式。唯一的问题可能是价格字段。如果 Price 是数据库中的数字字段,那么最好在将值添加到参数 @price 时对其进行转换。例如
Convert.ToDecimal(TextBox3.Text) -
还是一样的错误 cmd.Parameters.AddWithValue("@Price", Convert.ToDecimal(TextBox3.Text));