日期:2014-05-19  浏览次数:20719 次

百分相送,很简单的问题,在线结贴
有段代码如下
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 = ?)).... ",

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