读书人

百分相送,很简单的有关问题,在线结贴

发布时间: 2011-12-28 22:45:21 作者: rapoo

百分相送,很简单的问题,在线结贴
有段代码如下
string strSql = "select * from tblItem ";
OleDbDA = new OleDbDataAdapter(strSql,Connection);
dataSet = new DataSet();
OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(OleDbDA);
OleDbDA.Fill(dataSet);
dataSet.Tables[0].Rows[0][1] = 88;//加上这句就报错
OleDbDA.Update(dataSet, dataSet.Tables[0].TableName);
dataSet.AcceptChanges();

也就是说我一旦想修改dataset中的值就报错,报错信息为 "语法错误 (操作符丢失) 在查询表达式 '((item = ?) AND ((? = 1 AND Description IS NULL) OR (Description = ?)).... ",但是我在调试的时候输出dataset.Tables[0].Rows[0][1]本来也是有值的,不知为什么会报错,希望达人指点.


[解决办法]
DataSet.Tables[0].Rows[0][1]是指DataSet中的表0,行0,列1

尝试下
DataSet.Tables[0].Rows[0][1]=Convert.ToInt32( "88 ");
[解决办法]
你现看看你Fill后的dataset的表中是否有数据.我怎么感觉你的dataset中没有数据呢?
[解决办法]
1.
((item = ?) AND ((? = 1 AND Description IS NULL) OR (Description = ?))

=========

如果单纯这句,就少了最外层的一个右扣号

> > >

((item = ?) AND ((? = 1 AND Description IS NULL) OR (Description = ?)))

2.
string strSql = "select * from tblItem ";
===========
LZ 勤快点, 显示指定列名,否则,错了都不知道哪里调试
[解决办法]
改下顺序

string strSql = "select * from tblItem ";
OleDbDA = new OleDbDataAdapter(strSql,Connection);
dataSet = new DataSet();
OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(OleDbDA);
OleDbDA.Fill(dataSet);
dataSet.Tables[0].Rows[0][1] = 88;//加上这句就报错
OleDbDA.Update(dataSet, dataSet.Tables[0].TableName);
dataSet.AcceptChanges();
====================================
string strSql = "select * from tblItem ";
OleDbDA = new OleDbDataAdapter(strSql,Connection);
dataSet = new DataSet();
OleDbDA.Fill(dataSet);
dataSet.Tables[0].Rows[0][1] = 88;
OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(OleDbDA);
OleDbDA.Update(dataSet, dataSet.Tables[0].TableName);
dataSet.AcceptChanges();

[解决办法]
把dataSet.Tables[0].Rows[0][1]用MESSAGE报出来也是有数据的
-------------------------------------------------
那就是没有数据了。你的dataSet.Tables[0].RowCount=0或者dataSet.Tables[0].ColumnCount=1,看看是否这样。你可以现在数据库中给tblItem插入几条数据,在这样看看。
另外你的tblItem有没有主键啊。用CommandBuilder需要有主键的。
另外,能不能把那个错误的Stacktrace都贴出来,让大家给你参考参考。


[解决办法]
你可以试试这样
....
if(dataSet.Tables[0].RowsCount==0)
{
DataRow row=dataSet.Tables[0].NewRow();
dataSet.Tables[0].Rows.Add(row);
}
if(dataSet.Tables[0].ColumnCount> 1)
dataSet.Tables[0].Rows[0][1] = 88;
else if(dataSet.Tables[0].ColumnCount==0)
dataSet.Tables[0].Rows[0][0] = 88;

dataSet.Tables[0].Rows[0].EndEdit();
....


[解决办法]
根据提示信息感觉错误信息不在dataSet.Tables[0].Rows[0][1] = 88;这句。


((item = ?) AND ((? = 1 AND Description IS NULL) OR (Description = ?)).... ",

这个里面的第二个”?“怎么在前面?
还有括弧什么的都查下
------解决方案--------------------


先建立了主键后,再加上下面这句试试:

MissingSchemaAction

OleDbDA = new OleDbDataAdapter(strSql,Connection);
OleDbDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
dataSet = new DataSet();
OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(OleDbDA);
OleDbDA.Fill(dataSet);

[解决办法]
看看这个,专门讲操作access的.

http://topic.csdn.net/t/20041025/23/3490496.html
[解决办法]
OleDbDA.Update(dataSet, dataSet.Tables[0].TableName);
============================================
OleDbDA.Update(dataSet);

没有现成的Access的案例..

读书人网 >C#

热点推荐