string AccessSelectStr = @"SELECT [NO],[NAME] ,[SHORTNAME] FROM STATIONCFG";
DataTable AccessDt = GetDtBySelectFromAccess(AccessSelectStr);//该函数根据查询语句返回数据表,没有问题,并且数据表中没有记录.
OleDbDataAdapter AccessAdapter = new OleDbDataAdapter(AccessSelectStr, AccessConn);
DataRow dataRowAdded = AccessDt.NewRow();//添加记录前该表为空表
dataRowAdded["NO"] = 1;//该字段为主键
dataRowAdded["NAME"] = "aaa";
dataRowAdded["SHORTNAME"] = "bbb";
AccessDt.Rows.Add(dataRowAdded); OleDbCommandBuilder Cmd = new OleDbCommandBuilder(AccessAdapter);
AccessAdapter.Update(AccessDt);//该行出错
AccessDt.AcceptChanges();
//string CmdText = @"Insert Into STATIONCFG ([NO], [Name], [ShortName]) Values (1,'aaa','bbb')";
//ExecuteNoQuery(CmdText);//直接执行这个也没有问题
//数据库连接没有问题,并且上述代码用于另一个表却没有问题
//错误信息如下:
System.Data.OleDb.OleDbException: INSERT INTO 语句的语法错误。
在 System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
在 System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
在 System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
在 System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
在 System.Data.Common.DbDataAdapter.Update(DataTable dataTable)
DataTable AccessDt = GetDtBySelectFromAccess(AccessSelectStr);//该函数根据查询语句返回数据表,没有问题,并且数据表中没有记录.
OleDbDataAdapter AccessAdapter = new OleDbDataAdapter(AccessSelectStr, AccessConn);
DataRow dataRowAdded = AccessDt.NewRow();//添加记录前该表为空表
dataRowAdded["NO"] = 1;//该字段为主键
dataRowAdded["NAME"] = "aaa";
dataRowAdded["SHORTNAME"] = "bbb";
AccessDt.Rows.Add(dataRowAdded); OleDbCommandBuilder Cmd = new OleDbCommandBuilder(AccessAdapter);
AccessAdapter.Update(AccessDt);//该行出错
AccessDt.AcceptChanges();
//string CmdText = @"Insert Into STATIONCFG ([NO], [Name], [ShortName]) Values (1,'aaa','bbb')";
//ExecuteNoQuery(CmdText);//直接执行这个也没有问题
//数据库连接没有问题,并且上述代码用于另一个表却没有问题
//错误信息如下:
System.Data.OleDb.OleDbException: INSERT INTO 语句的语法错误。
在 System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
在 System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
在 System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
在 System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
在 System.Data.Common.DbDataAdapter.Update(DataTable dataTable)
解决方案 »
- WinForms文字透明如何实现
- (如图)在devexpress中如何实现把子窗体的标签放在主窗体的工具栏中?
- 求助一段代码(注册指定目录所有dll&OCX)
- 如何根据函数名字选择对应函数来执行?
- winfrom做的程序如何自适应 4:3 16:9的显示器? (C#)
- [WinForm]在一个TextBox里输入IP地址或域名,如何检验合法性?谢谢!
- 数据交互问题 急急!!!!!!!!!急急!!!!!!!!!!
- [求助]IE编码的问题
- 怎样侦听文件或目录的变动
- 玩Remoting遇到序列化问题,请教大虾
- winfroms 窗体设置问题
- System.Configuration.ConfigurationSettings.AppSettings 取值问题
在这句话后边添加一句
Console.WriteLine(CmdText );
把这个sql语句打印出来,然后到数据库里面执行,看是否能插入
string AccessSelectStr = @"SELECT NOXX,NAMEXX ,SHORTNAME FROM STATIONCFG";
刚才做了个修改:将表STATIONCFG的三个字段名改为NOXX,NAMEXX ,SHORTNAME,上述代码就没有问题了,也就是ACCESS关键字括起来[]也没用,系统也认为你用了关键字做字段.
那该如何将关键字转换成字段进行使用呢?
如果改成:
string CmdText = @"Insert Into STATIONCFG ([NO], [Name], ShortName) Values (1,'aaa','bbb')";
试试看,怎么样?
我以前也遇到这个问题,将access关键字转换成普通的字段就是用[]
ExecuteNoQuery(CmdText);
//直接执行上面两行是没有问题 ,下面的就有问题:
string AccessSelectStr = @"SELECT [NO],[NAME] ,SHORTNAME FROM STATIONCFG";
DataTable AccessDt = GetDtBySelectFromAccess(AccessSelectStr
OleDbDataAdapter AccessAdapter = new OleDbDataAdapter(AccessSelectStr, AccessConn);
DataRow dataRowAdded = AccessDt.NewRow();
dataRowAdded["NO"] = 1;
dataRowAdded["NAME"] = "aaa";
dataRowAdded["SHORTNAME"] = "bbb";
AccessDt.Rows.Add(dataRowAdded); OleDbCommandBuilder Cmd = new OleDbCommandBuilder(AccessAdapter);
AccessAdapter.Update(AccessDt);//该行出错
AccessDt.AcceptChanges();
我就是觉得上面的代码中方括号关键字没有起作用,郁闷!
dataRowAdded["NAME"] = "aaa";
dataRowAdded["SHORTNAME"] = "bbb";
改成
dataRowAdded["[NO]"] = 1;
dataRowAdded["[NAME]"] = "aaa";
dataRowAdded["SHORTNAME"] = "bbb";
试试看,可以不另外:
AccessAdapter.Update(AccessDt);
这个Update()方法是你自己定义的吗?
AccessAdapter.Update(AccessDt);
这个Update()方法是你自己定义的吗?
不是,OleDbDataAdapter自有的.
DataSet ds = new DataSet();
OleDbDataAdapter AccessAdapter = new OleDbDataAdapter(AccessSelectStr, AccessConn);
AccessAdapter.Fill(ds,"Test");
ds.Tables["Test"].Rows.Add(1,"aaa","bbb");
OleDbCommandBuilder Cmd = new OleDbCommandBuilder(AccessAdapter);
AccessAdapter.Update(ds,"Test");你试试看行不?
DataSet ds = new DataSet();
OleDbDataAdapter AccessAdapter = new OleDbDataAdapter(AccessSelectStr, AccessConn);
AccessAdapter.Fill(ds);
ds.Tables.Rows.Add(1,"aaa","bbb");
DataTable dt = ds.Table[0].GetChanges();
ds.Tables[0].acceptChange();
AccessAdapter.Update(ds);
ds.Tables[0].Merge(dt);
再看看这个
前面一个不行,报同样的错误.
后面一个不报错,但是记录没有写进数据库,好象下面
ds.Tables[0].acceptChange();
AccessAdapter.Update(ds);
ds.Tables[0].Merge(dt);
顺序有点问题
ds.Tables[0].Rows.Add(1,"aaa","bbb");
OleDbDataAdapter AccessAdapter = new OleDbDataAdapter(AccessSelectStr, AccessConn);
AccessAdapter.Fill(ds);
DataRow dataRowAdded = AccessDt.NewRow();
dataRowAdded["NO"] = 1;
dataRowAdded["NAME"] = "aaa";
dataRowAdded["SHORTNAME"] = "bbb";
ds.Tables.Rows.Add(dataRowAdded);
DataTable dt = ds.Table[0].GetChanges();
ds.Tables[0].acceptChange();
AccessAdapter.Update(ds);
ds.Tables[0].Merge(dt);
DataSet ds = new DataSet();
OleDbDataAdapter AccessAdapter = new OleDbDataAdapter(AccessSelectStr, AccessConn);
AccessAdapter.Fill(ds);
DataRow dataRowAdded = ds.Tables[0].NewRow();
dataRowAdded["NO"] = 1;
dataRowAdded["NAME"] = "aaa";
dataRowAdded["SHORTNAME"] = "bbb";
ds.Tables.Rows.Add(dataRowAdded);
DataTable dt = ds.Table[0].GetChanges();
ds.Tables[0].acceptChange();
AccessAdapter.Update(ds);
ds.Tables[0].Merge(dt);你看看这个怎么样不好意思啊!我也是刚学C#,一遍一遍的回帖都不好意思了,各位见谅啊
OleDbDataAdapter AccessAdapter = new OleDbDataAdapter(AccessSelectStr, AccessConn);
AccessAdapter.Fill(ds);
DataRow dataRowAdded = ds.Tables[0].NewRow();
dataRowAdded["NO"] = 1;
dataRowAdded["NAME"] = "aaa";
dataRowAdded["SHORTNAME"] = "bbb";
ds.Tables.Rows.Add(dataRowAdded);
DataTable dt = ds.Table[0].GetChanges();
ds.Tables[0].acceptChange();
//AccessAdapter.Update(ds);
//改成
AccessAdapter.Insert(ds);
ds.Tables[0].Merge(dt);
谢谢各位的回答,找到问题的原因了:
string AccessSelectStr = @"SELECT [NO],[NAME] ,SHORTNAME FROM STATIONCFG";
DataTable AccessDt = GetDtBySelectFromAccess(AccessSelectStr
OleDbDataAdapter AccessAdapter = new OleDbDataAdapter(AccessSelectStr, AccessConn);
DataRow dataRowAdded = AccessDt.NewRow();
dataRowAdded["NO"] = 1;
dataRowAdded["NAME"] = "aaa";
dataRowAdded["SHORTNAME"] = "bbb";
AccessDt.Rows.Add(dataRowAdded); OleDbCommandBuilder Cmd = new OleDbCommandBuilder(AccessAdapter);
//增加以下两行 OK
Cmd.QuotePrefix = "[";
Cmd.QuoteSuffix = "]"; AccessAdapter.Update(AccessDt);//该行出错
AccessDt.AcceptChanges();