ms-access-OledbCommandBuilder插入语句c#时出现语法错误

本文关键字:语法 错误 插入 语句 ms-access-OledbCommandBuilder | 更新日期: 2023-09-27 17:58:01

我知道这个问题已经被问了一百次了,我都看了一遍,不知道出了什么问题。这是访问中的表:

tbl_Slip
SlipNo*,
EmpID,
ScaleID,
Month-Year,
RaiseBasic,
OtherDed,
Tax,
Arrears,
Notes,

除年月和备注为文本外,所有字段均为整数类型。

现在是C#部分:这是我使用的代码。我试图找出错误,所以制作了一个带有harcode值的按钮。

(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"](ITWAS)中。我想不出其他什么了。

怎么了?

ms-access-OledbCommandBuilder插入语句c#时出现语法错误

快速回答:不要使用OleDbCommandBuilder。手动创建一个OleDbCommand作为INSERT INTO ... (...) VALUES (...),并使用参数化查询。然后,适当地添加参数。

你必须给我们看INSERT语句,这样我们才能知道它出了什么问题。

我敢打赌,无效命令的问题是字段名中有一个连字符,可能创建不正确,被解释为

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

使用带空格和/或连字符的列是个坏主意。是的,数据库允许这样做,但你不必因为可以就开枪自杀。