この質問が何百回も聞かれていることは知っていますが、それらすべてを調べましたが、何が問題なのかわかりません。これはアクセス中のテーブルです。
tbl_Slip
SlipNo*,
EmpID,
ScaleID,
Month-Year,
RaiseBasic,
OtherDed,
Tax,
Arrears,
Notes,
テキストである Month-Year と Notes を除いて、すべてのフィールドは整数型です。
C# の部分: これは私が使用するコードです。エラーを見つけようとしたので、ハードコードされた値でボタンを作成しました。
(oledbConnection は正常に動作します。フォームにデータを表示するために使用します)
この関数は、tbl_Slip にリンクするために使用します。
private void linkToSlip()
{
con.Open();
string sqlRecords = "Select * FROM tbl_Slip ORDER BY SlipNo";
SlipDA = new OleDbDataAdapter(sqlRecords, con);
SlipDA.Fill(SlipDS, "Slip");
// Primary key so DataTable.Rows.Find[] can be used
SlipDS.Tables["Slip"].PrimaryKey = new DataColumn[] { SlipDS.Tables["Slip"].Columns["SlipNo"] };
maxSlipRows = SlipDS.Tables["Slip"].Rows.Count;
dataGrid_Slip.DataSource = SlipDS;
dataGrid_Slip.DataMember = "Slip";
con.Close();
}
これはフォームの読み込み部分です:
private void frm_Slip_Load(object sender, EventArgs e)
{
SlipDS = new DataSet();
createcon();
linkToSlip();
}
(createcon は、データベースとの接続を確立するために使用する関数です)
ボタンのコードは次のとおりです。
private void button1_Click(object sender, EventArgs e)
{
OleDbCommandBuilder saveCB = new OleDbCommandBuilder(SlipDA);
DataRow dR = SlipDS.Tables["Slip"].NewRow();
dR[0] = Convert.ToInt32("2");
dR[1] = Convert.ToInt32("1");
dR[2] = Convert.ToInt32("1");
dR[3] = "January-2013";
dR[4] = Convert.ToInt32("15");
dR[5] = Convert.ToInt32("20");
dR[6] = Convert.ToInt32("2");
dR[7] = Convert.ToInt32("223");
dR[8] = "notes";
SlipDS.Tables["Slip"].Rows.Add(dR);
saveCB.DataAdapter.Update(SlipDS.Tables["Slip"]);
maxSlipRows++;
}
ボタンを押すと、与えられたエラーは
INSERT INTO ステートメントの構文エラーです。
何が問題なのかわかりません。重複をチェックし、データが SlipDS.Tables["Slip"] に保存されているかどうかをチェックしました (IT WAS)。他に思いつかない。
なにが問題ですか ?