SqlCommandBuilder如何實(shí)現(xiàn)批量更新
一般是這樣的,如果用設(shè)計(jì)器將SqlDataAdapter拖到頁(yè)面中使用時(shí),不會(huì)出現(xiàn)SqlDataAdapter.Update(ds)更新時(shí)出錯(cuò)情況,因?yàn)橄到y(tǒng)會(huì)自動(dòng)生成SqlDataAdapter的屬性命令,比如: .UpdateCommane insertCommand selectCommand等。 但是有些程序員不喜歡用設(shè)計(jì)器,或者是有些地方?jīng)]必要拖動(dòng)SqlDataAdapter這么個(gè)龐大物來(lái)實(shí)現(xiàn),那么SqlDataAdapter就不會(huì)自動(dòng)生成相關(guān)的查詢或更新語(yǔ)句了。 所以當(dāng)執(zhí)行到SqlDataAdapter.Update(ds)語(yǔ)句時(shí),SqlDataAdapter橋接器不知道更新哪個(gè)表不報(bào)錯(cuò)了。
解決方法:用SqlCommandBuilder 實(shí)現(xiàn)批量更新
1.功能:
可以實(shí)現(xiàn)你對(duì)DataSet在UI層做任意操作后,直接丟給這個(gè)方法,這個(gè)方法就可以自動(dòng)把你的修改更 新到數(shù) 據(jù)庫(kù)中,而沒(méi)必要每次都更新到數(shù)據(jù)庫(kù)
2.使用方法
public int UpdateByDataSet(DataSet ds,string strTblName,string strConnection)
{
try
{
SqlConnection conn = new SqlConnection(strConnection));
SqlDataAdapter myAdapter = new SqlDataAdapter();
SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection)this.conn);
myAdapter.SelectCommand = myCommand;
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
myAdapter.Update(ds,strTblName);
return 0;
}
catch(BusinessException errBU)
{
throw errBU;
}
catch(Exception err)
{
throw new BusinessException(err);
}
}
直接調(diào)用這個(gè)方法就可以啦,說(shuō)明的一點(diǎn)是select * from "+strTblName是一定要的,作用大家也應(yīng)該想到了,主要是告訴SqlDataAdapter更新哪個(gè)表。
3.什么時(shí)候用?
a. 有時(shí)候需要緩存的時(shí)候,比如說(shuō)在一個(gè)商品選擇界面,選擇好商品,并且進(jìn)行編輯/刪除/更新后,
最后一并交給數(shù)據(jù)庫(kù),而不是每一步操作都訪問(wèn)數(shù)據(jù)庫(kù),因?yàn)榭蛻暨x擇商品可能進(jìn)行n次編輯/刪除
更新操作,如果每次都提交,不但容易引起數(shù)據(jù)庫(kù)沖突,引發(fā)錯(cuò)誤,而且當(dāng)數(shù)據(jù)量很大時(shí)在用戶執(zhí)行
效率上也變得有些慢
b.有的界面是這樣的有的界面是這樣的,需求要求一定用緩存實(shí)現(xiàn),確認(rèn)之前的操作不提交到庫(kù),點(diǎn)擊
頁(yè)面專門提交的按鈕時(shí)才提交商品選擇信息和商品的其它信息. 我經(jīng)常遇到這樣的情況
c.有些情況下只往數(shù)據(jù)庫(kù)里更新,不讀取. 也就是說(shuō)沒(méi)有從數(shù)據(jù)庫(kù)里讀,SqlDataAdapter也就不知道是
更新哪張表了,調(diào)用Update就很可能出錯(cuò)了。這樣的情況下可以用SqlCommandBuilder 了.
4.注意點(diǎn):
1).只能更新一個(gè)表,不能更新兩個(gè)或兩個(gè)以上相關(guān)聯(lián)的表
2).表中必須有主鍵
3).更新的表中字段不能有image類型的
5.優(yōu)點(diǎn):
節(jié)省代碼量,節(jié)省時(shí)間,這個(gè)方法可以代替所有的: 更新/刪除/插入操作語(yǔ)句
6.缺點(diǎn):
訪問(wèn)兩次數(shù)據(jù)庫(kù)(select * TableName,就是這句,要確認(rèn)是哪個(gè)表,除非是很大的數(shù)據(jù)量, 一般是感覺(jué)不到的),效率有些慢。
以上就是用SqlCommandBuilder 實(shí)現(xiàn)批量更新的方法,介紹了其優(yōu)缺點(diǎn),以及注意點(diǎn),內(nèi)容很詳細(xì),希望大家可以喜歡。
- JBuilderX+SQL Server開(kāi)發(fā)hibernate
- jbuilder2006連接sqlserver2000的方法
- asp.net Reporting Service在Web Application中的應(yīng)用
- mysqlreport顯示Com_中change_db占用比例高的問(wèn)題的解決方法
- PHP函數(shù)之error_reporting(E_ALL ^ E_NOTICE)詳細(xì)說(shuō)明
- PHP中error_reporting()函數(shù)的用法(修改PHP屏蔽錯(cuò)誤)
- SQL Server 2008+ Reporting Services (SSRS)使用USER登錄問(wèn)題
- SqlCommandBuilder類批量更新excel或者CSV數(shù)據(jù)的方法
- SQL Report Builder 報(bào)表里面的常見(jiàn)問(wèn)題分析
相關(guān)文章
ASP.NET MVC3 實(shí)現(xiàn)全站重定向的簡(jiǎn)單方法
這篇文章主要介紹了ASP.NET MVC3 實(shí)現(xiàn)全站重定向的簡(jiǎn)單方法,有需要的朋友可以參考一下2014-01-01
使用.Net?Core實(shí)現(xiàn)的一個(gè)圖形驗(yàn)證碼功能
SimpleCaptcha是一個(gè)使用簡(jiǎn)單,基于.Net Standard 2.0的圖形驗(yàn)證碼模塊。這篇文章主要介紹了使用.Net?Core實(shí)現(xiàn)的一個(gè)圖形驗(yàn)證碼功能,需要的朋友可以參考下2021-12-12
.NET?API?接口數(shù)據(jù)傳輸加密最佳實(shí)踐記錄
這篇文章主要介紹了.NET?API?接口數(shù)據(jù)傳輸加密最佳實(shí)踐記錄,我們?cè)谧?Api?接口時(shí),相信一定會(huì)有接觸到要給傳輸?shù)恼?qǐng)求?body?的內(nèi)容進(jìn)行加密傳輸。其目的就是為了防止一些敏感的內(nèi)容直接被?UI?層查看或篡改,需要的朋友可以參考下2022-10-10
.net WINFORM的GDI雙緩沖的實(shí)現(xiàn)方法
下面小編就為大家分享一篇.net WINFORM的GDI雙緩沖的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
在.NET Web API設(shè)置響應(yīng)輸出Json數(shù)據(jù)格式常用的兩種方式詳解
在ASP.NET Core Web API中設(shè)置響應(yīng)輸出Json數(shù)據(jù)格式常用以下兩種方式:可以通過(guò)添加System.Text.Json或Newtonsoft.JsonJSON序列化和反序列化庫(kù)在應(yīng)用程序中全局設(shè)置接口響應(yīng)的Json數(shù)據(jù)格式,本文示例使用的是新的Minimal API模式,感興趣的朋友跟隨小編一起看看吧2024-07-07
asp.Net JS取母板頁(yè)控件值的簡(jiǎn)單方法
這篇文章介紹了asp.Net JS取母板頁(yè)控件值的簡(jiǎn)單方法,有需要的朋友可以參考一下2013-07-07
asp.net core下給網(wǎng)站做安全設(shè)置的方法詳解
這篇文章主要給大家介紹了關(guān)于asp.net core下給網(wǎng)站做安全設(shè)置的相關(guān)資料,文章通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
在 .NET Framework 2.0 中未處理的異常導(dǎo)致基于 ASP.NET 的應(yīng)用程序意外退出
如果在 Microsoft .NET Framework 2.0 上構(gòu)建的基于 Microsoft ASP.NET 的應(yīng)用程序中引發(fā)未處理的異常,該應(yīng)用程序?qū)?huì)意外退出。如果出現(xiàn)這個(gè)問(wèn)題,不會(huì)在應(yīng)用程序日志中記錄了解此問(wèn)題所必需的異常信息。2009-11-11

