用SqlCommandBuilder更新DataSet,遇到“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”问题,关键代码如下(C#):
........
string emailSql="select email,validFlag from emailMe";
DataSet emailAdd=new DataSet();
SqlDataAdapter emailAdapter=new SqlDataAdapter(emailSql,myConn);
SqlCommandBuilder cb=new SqlCommandBuilder(emailAdapter);
emailAdapter.Fill(emailAdd,"address");
myConn.Close();
......//修改myDs数据
emailAdapter.Update(emailAdd,"address");
emailMe的结构是这样的:
email nvarchar 100
validFlag int
运行这段代码,竟然出现了“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”错误。想了一下,是因为emailMe表中没有定义主键字段,所以SqlCommandBuilder无法为SqlDataAdapter自动生成需要的UpdateCommand。修改表的定义,将email字段定义为主键问题当然可以解决,但是因为库里表太多了,逐一修改几乎不可能,有没有其他办法呢?
在网上搜了一下,发现有位网名“蓝色理想”的朋友给出了一个解决方案(http://www.blueidea.com/tech/program/2004/1761.asp),赶紧试一下:
........
string emailSql="select email,

在使用SqlCommandBuilder更新DataSet时遇到错误:'对于不返回任何键列信息的SelectCommand不支持UpdateCommand的动态SQL生成'。原因是表中缺少主键。通过两种方法解决:1. 修改表结构,添加主键;2. 手动为SqlDataAdapter指定UpdateCommand。示例代码展示了手动指定UpdateCommand的方法。
最低0.47元/天 解锁文章
983

被折叠的 条评论
为什么被折叠?



