c#用SqlCommandBuilder把DataSet更新到数据库?为什么没起效,求大神。

SqlDataAdaptersda=newSqlDataAdapter("select*fromTittle",conn);//sda执行的sql语句、数据库连接Data... SqlDataAdapter sda = new SqlDataAdapter("select * from Tittle", conn);//sda执行的sql语句、数据库连接
DataSet ds = new DataSet();
sda.Fill(ds); //往DataSet对象里填充数据
SqlCommand cmd = new SqlCommand("TRUNCATE Table Tittle", conn) //删除整个表
//cmd.ExecuteNonQuery(); //这句可以把数据库也更新了。
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
sda.UpdateCommand = scb.GetUpdateCommand();
sda.Update(ds);

执行删除操作后,为什么数据库里没被更新啊?
我用cmd.ExecuteNonQuery(); 这句的话可以把数据库也更新了。但我现在要用SqlCommandBuilder来。
展开
 我来答
阳光的雷咩咩
2014-11-27 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7654万
展开全部
你有个地方混淆了,使用SqlCommandBuilder的好处在于你对DataSet(注意是内存里)的修改(比如,你遍历ds里的Tittle表修改某些字段,或者绑定到datagridview修改)可以通过Update自动更新到数据库。但不包括你其他的SqlCommand语句的增删改。
更多追问追答
追问
dt.Rows.Remove(dt.Rows[0]);//删除DataTable对象dt里的第一行SqlCommandBuilder scb = new SqlCommandBuilder(sda); 
sda.UpdateCommand = scb.GetUpdateCommand();
sda.Update(dt);
sql里一样没看见被删除
追答
那你试试把Remove方法换成delete方法呢,还有最后要acceptchanges。另外数据库里要有主键。
来自石佛山适应性强的山楂
2014-11-27
知道答主
回答量:17
采纳率:0%
帮助的人:7.9万
展开全部
TRUNCATE Table 删除表中的所有行,但是表的结构、列、约束、索引等不会被改动。TRUNCATE Table不能用于有外键约束引用的表,这种情况下,需要使用delete语句。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
89801860
2014-11-27 · TA获得超过139个赞
知道小有建树答主
回答量:186
采纳率:100%
帮助的人:128万
展开全部
SqlCommandBuilder 是为 SqlDataAdapter 自动产生SQL语句的来批量的更新DataSet的。你概念上理解有误
追问
我试过了, SqlCommandBuilder确实是根据SqlDataAdapter 对象的sql操作语句 来更新的。

唉,我是被垃圾书给害了,我照着弄的,它上面的sql语句就是写 select。晕了我几个小时。

《c#从入门到精通》 明日科技 编著。。。。。超级垃圾啊。
追答
当你不为SqlDataAdapter 指定SqlCommandBuilder的时候,你就必须手动为
SqlDataAdapter 写好 InsertCommand,DeleteCommand,UpdateCommand语句,否则是无法调用Update方法来更新的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式