-1

この質問が何百回も聞かれていることは知っていますが、それらすべてを調べましたが、何が問題なのかわかりません。これはアクセス中のテーブルです。

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)。他に思いつかない。

なにが問題ですか ?

4

2 に答える 2

0

無効なコマンドの問題は、フィールド名にハイフンが含まれており、おそらく適切に作成されておらず、次のように解釈されていることです。

insert into tbl_Slip ( EmpID, ScaleID, Month-Year, ...

列にスペースやハイフンを含めるのはお勧めできません。はい、データベースはそれを許可していますが、できるからといって自分を撃つ必要はありません。

于 2013-03-20T03:17:43.400 に答える
0

簡単な答え: を使用しないでくださいOleDbCommandBuilderOleDbCommand手動で asを作成しINSERT INTO ... (...) VALUES (...)、パラメーター化されたクエリを使用します。次に、パラメータを適切に追加します。

INSERT何が問題なのかを判断できるように、ステートメントを表示する必要があります。

于 2013-02-05T15:02:51.657 に答える