查资料说DataAdatpter更新数据的时候必须设置InsertCommand,UpdateCommand,DeleteCommand,但是我今天测试程序的时候,发现不用设置上面三个命令对象,DataAdapter也能够更新数据,因为我查看DataAdapter的这三个命令对象都是 null.
今天想查看InsertCommand的原因是DataAdapter已经执行过CommandBuider,以为他能够自动创建插入命令对象:
//设置SelectCommand
string sql = "Select * from " + tableName + " where 1<>1";
sda = new SQLiteDataAdapter();
cmd = new SQLiteCommand(sql, cn);
sda.SelectCommand = cmd; SQLiteCommandBuilder cb = new SQLiteCommandBuilder(sda);
cmd.Transaction = tran; DataSet ds = new DataSet();
sda.Fill(ds, tableName);
。。
DataRow dr=ds.Tables[0].NewRow();
dr[0]=1000;
dr[1]="aaa";
ds.Tables[0].Rows.Add(dr);
int count=sda.Update(ds,tableName );//在这里检查,InsertCommand==null;
//检查,count==1没有 InsertCommand,为啥也能够更新数据???
今天想查看InsertCommand的原因是DataAdapter已经执行过CommandBuider,以为他能够自动创建插入命令对象:
//设置SelectCommand
string sql = "Select * from " + tableName + " where 1<>1";
sda = new SQLiteDataAdapter();
cmd = new SQLiteCommand(sql, cn);
sda.SelectCommand = cmd; SQLiteCommandBuilder cb = new SQLiteCommandBuilder(sda);
cmd.Transaction = tran; DataSet ds = new DataSet();
sda.Fill(ds, tableName);
。。
DataRow dr=ds.Tables[0].NewRow();
dr[0]=1000;
dr[1]="aaa";
ds.Tables[0].Rows.Add(dr);
int count=sda.Update(ds,tableName );//在这里检查,InsertCommand==null;
//检查,count==1没有 InsertCommand,为啥也能够更新数据???
解决方案 »
- 错误信息
- zedGraph 曲线与X轴重合部分显示
- 怎么用C#运行DOS命令并且不退出DOS窗口?
- SQLEXPRESS 是否要安装?? 如何解决??
- 高分求助!!!关于Media Player控件调用全屏问题!
- 再提问一次~关于在MDI主窗口里放控件的问题
- 求救:有数组a[n],和数组b[m], n>m, 要求把数组a中的最小值放在面试时候遇到的题目,是去海辉高科面试时候遇到的
- 如何获取主板id?
- 200求--把RTF文档转换为HTML文档的.net/com组件或c#代码。
- C# 上传下载附件(文件)
- form程序上放axWindowsMediaPlayer控件后不能关闭窗体
- 为什么拖到tableLayoutPanel里的其它控件都只能自动左上角对齐啊,能不能改变他的对齐方式?
//检查:sda.InsertCommand=null;
我都不相信啊,但的确如此。
同意你使用了CommandBuilder生成command 之后,DataAdatpter.InsertCommand等不会存在你在调用DataAdatpter.update时,方法内部会处理的实在不相信就把
SQLiteCommandBuilder cb = new SQLiteCommandBuilder(sda);
这句删除,看还能插入数据不
CommandBuilder会根据你的sql语句去生成delete,insert,update等command.
SelectCommand 必须至少返回一个主键列或唯一的列,否则是生成不了上述三个命令的.