有段代码如下
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]本来也是有值的,不知为什么会报错,希望达人指点.
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]=Convert.ToInt32("88");
((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 勤快点, 显示指定列名,否则,错了都不知道哪里调试
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].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();
....
((item = ?) AND ((? = 1 AND Description IS NULL) OR (Description = ?))....",这个里面的第二个”?“怎么在前面?
还有括弧什么的都查下
报错信息如下:
语法错误 (操作符丢失) 在查询表达式 '((item = ?) AND ((? = 1 AND Description IS NULL) OR (Description = ?)) AND ((? = 1 AND Quality IS NULL) OR (Quality = ?)) AND ((? = 1 AND Price IS NULL) OR (Price = ?)) AND ((? = 1 AND Mark Up IS NULL) OR (Mark Up = ?)) AND ((? = 1 AND Total IS NULL) OR (' 中。
OleDbDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
dataSet = new DataSet();
OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(OleDbDA);
OleDbDA.Fill(dataSet);
{
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();
这段代码也能执行过去,就是到了OleDbDA.Update(dataSet, dataSet.Tables[0].TableName)还是报错,各位,谁有代码给贴一段吧,谢谢了
============================================
OleDbDA.Update(dataSet);没有现成的Access的案例..