| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1348 人关注过本帖
标题:[求助]新手遇上老问题...SqlDataAdapter更新数据库
只看楼主 加入收藏
永远支持
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-5-13
收藏
 问题点数:0 回复次数:11 
[求助]新手遇上老问题...SqlDataAdapter更新数据库

用了整一天时间,搜索过论坛以前的帖子,也在网上找过相关文章,还是不行...

DataSet ds = new DataSet();
SqlConnection scon = new SqlConnection("server=;uid=sa;pwd=123;database=aaa");
SqlDataAdapter da = new SqlDataAdapter("select * from ccc", scon);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
scon.Open();
da.Update(ds, "ccc");
scon.Close();

不知道是哪里出错了,请高手们指点一下...先谢了

搜索更多相关主题的帖子: 数据库 
2007-02-05 23:47
jacklee
Rank: 7Rank: 7Rank: 7
来 自:XAplus
等 级:贵宾
威 望:32
帖 子:1769
专家分:104
注 册:2006-11-3
收藏
得分:0 
有个更新实例,



用SqlCommandBuilder 实现批量更新

1.功能:

可以实现你对DataSet在UI层做任意操作后,直接丢给这个方法,这个方法就可以自动把你的修改更 新到数 据库中,而没必要每次都更新到

数据库

2.使用方法
public DataSetUpdateByDataSet(DataSet ds,string strTblName,string strConnection)
{
SqlConnection conn = new SqlConnection(strConnection));

SqlDataAdapter myAdapter = new SqlDataAdapter();
SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection) conn);
myAdapter.SelectCommand = myCommand;
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
try

{

lock(this) //处理并发情况(分布式情况)

{

myAdapter.Update(ds,strTblName);

}

}

catch(Exception err)
{

conn.Close();
throw new BusinessException(err);
}

return ds; //数据集的行状态在更新后会都变为: UnChange,在这次更新后客户端要用返回的ds

}



public DataSet UpdateByDataSet(DataSet ds,string strTblName,string strConnection)
{


SqlConnection conn = new SqlConnection(strConnection));
SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection) conn);

SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand );

SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);

myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand();

myAdapter.UpdateCommand = myCommandBuilder .GetUpdateCommand();

myAdapter.DeleteCommand = myCommandBuilder .GetDeleteCommand();

try

{

lock(this) //处理并发情况(分布式情况)

{

conn.Open();

myAdapter.Update(ds,strTblName);

conn.Close();

}

return ds; //数据集的行状态在更新后会都变为: UnChange,在这次更新后客户端要用返回的ds }
catch(Exception err)
{

conn.Close();
throw new BusinessException(err);
}
}

直接调用这两个方法的任意一个就OK啦,说明的一点是select * from "+strTblName是一定要的,
作用大家也应该想到了,主要是告诉 SqlDataAdapter更新哪个表


3.什么时候用?

a. 有时候需要缓存的时候,比如说在一个商品选择界面,选择好商品,并且进行编辑/删除/更新后,

最后一并交给数据库,而不是每一步操作都访问数据库,因为客户选择商品可能进行n次编辑/删除

更新操作,如果每次都提交,不但容易引起数据库冲突,引发错误,而且当数据量很大时在用户执行

效率上也变得有些慢

b.有的界面是这样的有的界面是这样的,需求要求一定用缓存实现,确认之前的操作不提交到库,点击

页面专门提交的按钮时才提交商品选择信息和商品的其它信息. 我经常遇到这样的情况

c.有些情况下只往数据库里更新,不读取. 也就是说没有从数据库里读,SqlDataAdapter也就不知道是

更新哪张表了,调用Update就很可能出错了。这样的情况下可以用SqlCommandBuilder 了.


4.
注意点:
1.只能更新一个表,如果此数据集是从两个或者两个以上的表关联而来的,则不能用此方法自动更新
2.表中必须设置主键
3.更新的表中字段不能有image类型的

5.优点:

节省代码量,节省时间,这个方法可以代替所有的: 更新/删除/插入操作语句

6.缺点:
访问两次数据库(select * TableName,就是这句,要确认是哪个表,除非是很大的数据量,
一般是感觉不到的),效率稍微有些慢

XAplus!
讨论群:51090447
删吧删吧,把我的号给删了!
2007-02-06 08:37
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
楼主的 ds 没有填充...
更新时,里面没有数据..

飘过~~
2007-02-06 08:50
liuminghui
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:2882
专家分:0
注 册:2007-1-26
收藏
得分:0 
jacklee说得不错啊!!
水平真高!!

海鸽 is My Lover!!
2007-02-06 08:51
liuminghui
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:2882
专家分:0
注 册:2007-1-26
收藏
得分:0 

同意bygg的说法
楼主里面没有Fill语句


海鸽 is My Lover!!
2007-02-06 08:52
永远支持
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-5-13
收藏
得分:0 

谢谢几位朋友帮忙...

我试了试大家给我说的方法,可是还不行..
jacklee版主说的两个方法都试了..
bygg版主和liuminghui说的fill语句也试了..


估计大家说的方法都是对的!我会不会是在哪个控件属性或数据库哪里设置错了?!
主键我设了,只用了一张表,没有image

2007-02-06 12:11
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
把你加了 fill 的代码都发出来看一下..

飘过~~
2007-02-06 12:28
永远支持
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-5-13
收藏
得分:0 
DataSet ds = new DataSet();
SqlConnection scon = new SqlConnection("server=;uid=sa;pwd=123;database=aaa");
SqlDataAdapter da = new SqlDataAdapter("select * from ccc", scon);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
scon.Open();
da.Fill(ds, "ccc");//加在这里了
da.Update(ds, "ccc");
scon.Close();
2007-02-06 12:43
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/WD_ADONET/html/d1bd9a8c-0e29-40e3-bda8-d89176b72fb1.htm
这个里就有的..

飘过~~
2007-02-06 12:52
永远支持
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-5-13
收藏
得分:0 

谢谢bygg版主。。

2007-02-06 13:01
快速回复:[求助]新手遇上老问题...SqlDataAdapter更新数据库
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.063487 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved