百分相送,很简单的问题,在线结贴
有段代码如下
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 = ?)).... ",
这个里面的第二个”?“怎么在前面?
还有括弧什么的都查下
------解决方案--------------------