テーブルのデータを更新、挿入、または削除するために DataGridView を使用しています。コードはデータを非常にうまく挿入しますが、データまたは行を更新または削除するとエラーが発生します。コードは次のとおりです。
OleDbCommand sCommand;
OleDbDataAdapter sAdapter;
OleDbCommandBuilder sBuilder;
DataSet sDs;
DataTable sTable;
//Load Data...
private void button1_Click(object sender, EventArgs e)
{
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + Application.StartupPath + @"\Label-Data.accdb";
string sql = "SELECT * FROM _Default";
OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();
sCommand = new OleDbCommand(sql, connection);
sAdapter = new OleDbDataAdapter(sCommand);
sBuilder = new OleDbCommandBuilder(sAdapter);
sDs = new DataSet();
sAdapter.Fill(sDs, "_Default");
sTable = sDs.Tables["_Default"];
connection.Close();
dataGridView1.DataSource = sDs.Tables["_Default"];
dataGridView1.ReadOnly = true;
button4.Enabled = false;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}
//Add or Edit...
private void button2_Click(object sender, EventArgs e)
{
dataGridView1.ReadOnly = false;
button4.Enabled = true;
button2.Enabled = false;
button3.Enabled = false;
}
//Delete...
private void button3_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Do you want to delete this row ?", "Delete", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
sAdapter.Update(sTable);
}
}
//Save...
private void button4_Click(object sender, EventArgs e)
{
sAdapter.Update(sTable);
dataGridView1.ReadOnly = true;
button4.Enabled = false;
button2.Enabled = true;
button3.Enabled = true;
}
sAdapter.Update(sTable); でエラーが発生します。エラーは
クエリ式の構文エラー '((ID = ?) AND ((? = 1 AND Prn IS NULL) OR (Prn = ?)) AND ((? = 1 AND _Copy IS NULL) OR (_Copy = ?)) AND ( (? = 1 AND _Item IS NULL) OR (_Item = ?)) AND ((? = 1 AND _Design IS NULL) OR (_Design = ?)) AND ((? = 1 AND Tray_No IS NULL) OR (Tray_No = ? )) と (('。
このエラーを解消するにはどうすればよいですか?