对于不返回任何键列信息的SelectCommand,不支持UpdateCommand 的动态SQL生成
来源:互联网 发布:网络生鲜农产品ppt 编辑:程序博客网 时间:2024/06/11 21:12
用SqlCommandBuilder更新DataSet,遇到“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”问题,关键代码如下(C#):
string connectionString = "Data Source=127.0.0.1;Initial Catalog=Test;Persist Security Info=True;User ID=sa;Password=1234";
string commandString = "SELECT * FROM tbl_Option";
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = commandString;
SqlDataAdapter dataAdapter = new SqlDataAdapter();//构造SqlDataAdapter
dataAdapter.SelectCommand = cmd;//与sql命令对象绑定,这个必不可少
SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter);
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "Option1");
con.Close();
ds.Tables["Option1"].Rows[0][1]="张三";
dataAdapter.Update(ds, "Option1");
运行这段代码,竟然出现了“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”错误。
网上查了一下资料说是没有定义主键,可如果数据库表有很多个,那数据库中表就需要改动的地方太多了,有没有其它方法呢
网上给了一个方法,我这边测试是成功的
关键代码如下:
……………………
DataSet ds = new DataSet();
SqlCommand upCmd = new SqlCommand("update tbl_Option set OptionName=@OptionName where OptionID=@OptionID", con);
upCmd.Parameters.Add("@OptionID", SqlDbType.Int, 8, "OptionID");
upCmd.Parameters.Add("@OptionName", SqlDbType.NVarChar, 50, "OptionName");
dataAdapter.DeleteCommand = upCmd;
dataAdapter.Fill(ds, "Option1");
con.Close();
ds.Tables["Option1"].Rows[0][1]="张三";
dataAdapter.Update(ds, "Option1");
……………………
总结一下,对这样的问题,解决方法两种:
1. 修改表的定义,定义一个主键;
2. 为SqlDataAdapter指定UpdateCommand(DeleteCommand,InsertCommand应该也一样);
3. 其它方法(在网上搜了一下,发现有位网名“蓝色理想”的朋友给出了一个解决方案(http://www.blueidea.com/tech/program/2004/1761.asp),应该是没有问题的,本人小菜,还没弄明白,望高手给予解答。
- 对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成。
- 对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成
- 对于不返回任何键列信息的SelectCommand不支持UpdateCommand 的动态SQL生成。
- 对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成,异常
- 对于不返回任何键列信息的 selectcommand 不支持 updatecommand 的动态 sql 生成
- 对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand、DeleteCommand 的动态 SQL 生成
- 对于不返回任何键列信息的SelectCommand,不支持UpdateCommand 的动态SQL生成
- 对于不返回任何键列信息的SelectCommand不支持UpdateCommand的动态SQL生成
- “对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。”
- 对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成
- 对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成
- 对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成
- ”对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成“解决办法
- 对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成
- “对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成”解决方法
- 对于不返回任何键列信息的 selectcommand 不支持 updatecommand 的动态 sql 生成
- 对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成
- 对于“不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”问题的解决
- Android log扩展
- C#中调用非托管的DLL及参数传递
- 互联网产品设计进阶(16)灵活使用层布局页面
- Timer Elapsed
- Spring学习笔记
- 对于不返回任何键列信息的SelectCommand,不支持UpdateCommand 的动态SQL生成
- java对象的初始化顺序
- fatal error C1083: Cannot open precompiled header file:
- android拍照并剪辑
- Combobox弹出下拉的dataGridView
- android 3.0系统全介绍
- J1850总线协议数据转串口协议数据(一)
- (转载)Linux里使用SSH代理fanqiang最简单的方法!
- Hadoop项目jar包管理