1

間違っているかもしれませんが、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
4

1 に答える 1

2

コマンド生成に関するこのドキュメントによると

列名またはテーブル名にスペース、ピリオド、引用符、その他の英数字以外の文字などの特殊文字が含まれていると、括弧で区切られていても、自動コマンド生成ロジックは失敗します。catalog.schema.table の形式の完全修飾テーブル名がサポートされています。

列名にスペースが含まれているため、クエリは機能しません。手動で挿入ステートメントを作成する必要がありますが、これは非常に簡単です。すべての列名を括弧で囲み、スペースや特殊文字を含まない値にパラメーターを使用します。

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

また、これらのパラメーター名もパラメーターの作成に使用します。

con.InsertCommand.Parameters.AddWithValue("@column1", cur["..."]);
于 2012-05-22T21:24:23.817 に答える