我手工建数据库连接相关对象后,插入一条记录系统提示“INSERT INTO 语句的语法错误”,但是通过从VS2005的“工具箱”拖数据控件的方法就可以插入记录,为什么?
我手写的程序如下:
using System.Data;
using System.Data.OleDb;
所需要的引用都加上了,数据库连接也没问题,就是自己写OleDbCommandBuilder OleCb = new OleDbCommandBuilder(OleDa)不能生成正确的命令,而通过拖放控件系统自动生成的就没问题。string sDbCn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\test.mdb;Persist Security Info=True";OleDbConnection OleCn = new OleDbConnection(sDbCn);
OleCn.Open();
OleDbDataAdapter OleDa = new OleDbDataAdapter("select * from czy", OleCn);
OleDbCommandBuilder OleCb = new OleDbCommandBuilder(OleDa);DataSet DS = new DataSet();
OleDa.Fill(DS, "czy");DataRow DR = DS.Tables["czy"].NewRow();
DR[0] = "周二";
DR[1] = "1";
DS.Tables["czy"].Rows.Add(DR);OleDa.Update(DS, "czy");
OleCn.Close();执行到Update时提示“INSERT INTO 语句的语法错误。”
再有我改成用insert命令时也没问题,能正常插入数据,用insert命令的程序如下
string sDbCn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\test.mdb;Persist Security Info=True";OleDbConnection OleCn = new OleDbConnection(sDbCn);
OleCn.Open();
OleDbDataAdapter OleDa = new OleDbDataAdapter("select * from czy", OleCn);
OleDbCommandBuilder OleCb = new OleDbCommandBuilder(OleDa);
OleDbCommand OleCm = new OleDbCommand("insert into `czy` (`xm`,`qx`) VALUES ('周二','1')", OleCn);
OleCm.ExecuteNonQuery();
OleCn.Close();

解决方案 »

  1.   

    OleDbDataAdapter OleDa = new OleDbDataAdapter("select * from czy", OleCn);
    改为
    OleDbDataAdapter OleDa = new OleDbDataAdapter("select * from [czy]", OleCn);试试.
      

  2.   

    以前在Oracle和sql上用过,没问题的
      

  3.   

    改为OleDbDataAdapter OleDa = new OleDbDataAdapter("select * from [czy]", OleCn)也不行
      

  4.   

    DataRow DR = DS.Tables["czy"].NewRow();
    DR[0] = "周二";
    DR[1] = "1";
    DS.Tables["czy"].Rows.Add(DR);会不会有错啊
      

  5.   

    新发现!
    用建立 OleDbCommand OleCm = new OleDbCommand("insert into `czy` (`xm`,`qx`) VALUES ('周二','1')", OleCn);可以通过。但OleDbCommandBuilder OleCb = new OleDbCommandBuilder(OleDa)自动生成的语句却是这样的:INSERT INTO czy (xm,qx) VALUES (?, ?),参数没问题,问题是字段名中没有单引号了,怎么才能让自动生成的语句带上单引号或中括号呢(经测试中括号也行“[]”),即只要语句改成INSERT INTO czy ('xm','qx') VALUES (?, ?)就行。