也许我做错了,但我正在尝试使用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
答案 0 :(得分:2)
根据命令生成this documentation
如果列名或表,则自动命令生成逻辑失败 名称包含任何特殊字符,例如空格,句点, 引号或其他非字母数字字符,即使 用括号分隔。完全限定的表名称形式 支持catalog.schema.table。
由于您的列名称包含空格,因此查询将不起作用。您必须手动创建insert语句,这非常简单。只需在所有列名称周围加上括号,并使用参数作为没有空格或特殊字符的值。
INSERT INTO [TableName] ([Column1], [Column2], ...)
VALUES (@Column1, @Column2, ...)
您还可以在参数创建中使用这些参数名称:
con.InsertCommand.Parameters.AddWithValue("@column1", cur["..."]);