在访问中插入新行

时间:2012-05-22 21:08:37

标签: c# ado.net ms-access-2007

也许我做错了,但我正在尝试使用ado.net在表格中插入新行。但它告诉我语法错误。

customers = new DataTable("Customers");
cmd = "SELECT * FROM Customers";
con = new OleDbDataAdapter(cmd, strconn);
con.FillSchema(customers, SchemaType.Source);
con.Fill(customers);
DataRow cur;
cur = customers.NewRow();
cur["Company"] = textBoxCompany.Text;
cur["First Name"] = textBoxFirstName.Text;
cur["Last Name"] = textBoxLastName.Text;
cur["E-mail Address"] = textBoxEmail.Text;
cur["Job Title"] = textBoxTitle.Text;
cur["Business Phone"] = textBoxPhone.Text;
customers.Rows.Add(cur);
OleDbCommandBuilder cb = new OleDbCommandBuilder(con);
con.InsertCommand = cb.GetInsertCommand();           
con.InsertCommand.Parameters.AddWithValue("Company",cur["Company"]);
con.InsertCommand.Parameters.AddWithValue("Last Name",cur["Last Name"]);
con.InsertCommand.Parameters.AddWithValue("First Name", cur["First Name"]);
con.InsertCommand.Parameters.AddWithValue("E-Mail Address",cur["E-mail Address"]);
con.InsertCommand.Parameters.AddWithValue("Job Title",cur["Job Title"]);
con.InsertCommand.Parameters.AddWithValue("Business Phone",cur["Business Phone"]);
con.Update(customers);

“INSERT INTO语句中的语法错误。”

堆栈追踪:

at System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
at System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
at System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
at System.Data.Common.DbDataAdapter.Update(DataTable dataTable)
at Project2.Form1.button1_Click(Object sender, EventArgs e) in Form1.cs:line 54

1 个答案:

答案 0 :(得分:2)

根据命令生成this documentation

  

如果列名或表,则自动命令生成逻辑失败   名称包含任何特殊字符,例如空格,句点,   引号或其他非字母数字字符,即使   用括号分隔。完全限定的表名称形式   支持catalog.schema.table。

由于您的列名称包含空格,因此查询将不起作用。您必须手动创建insert语句,这非常简单。只需在所有列名称周围加上括号,并使用参数作为没有空格或特殊字符的值。

INSERT INTO [TableName] ([Column1], [Column2], ...)
VALUES (@Column1, @Column2, ...)

您还可以在参数创建中使用这些参数名称:

con.InsertCommand.Parameters.AddWithValue("@column1", cur["..."]);