亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

DATASET 與 DATAREADER對象有什么區(qū)別

2024-08-31 01:04:18
字體:
供稿:網(wǎng)友

 DataReader和DataSet最大的區(qū)別在于,DataReader使用時始終占用SqlConnection(俗稱:非斷開式連接),在線操作數(shù)據(jù)庫時,任何對SqlConnection的操作都會引發(fā)DataReader的異常。因為DataReader每次只在內(nèi)存中加載一條數(shù)據(jù),所以占用的內(nèi)存是很小的。由于DataReader的特殊性和高性能,所以DataReader是只進(jìn)的,你讀了第一條后就不能再去讀取第一條了。 DataSet則是將數(shù)據(jù)一次性加載在內(nèi)存中,拋棄數(shù)據(jù)庫連接(俗稱:斷開式連接)。讀取完畢即放棄數(shù)據(jù)庫連接,因為DataSet將數(shù)據(jù)全部加載在內(nèi)存中,所以比較消耗內(nèi)存。但是確比DataReader要靈活,可以動態(tài)的添加行,列,數(shù)據(jù),對數(shù)據(jù)庫進(jìn)行回傳,更新操作等。

使用DataReader與DataSet都可以從數(shù)據(jù)源讀取數(shù)據(jù)。DataReader本身是通過IDbCommand.ExecuteReader()方法進(jìn)行構(gòu)建的;而DataSet則是通過DbDataAdapter.Fill()方法進(jìn)行填充。此外,兩者的工作方式有明顯的不同:DataReader的執(zhí)行過程不能脫離數(shù)據(jù)庫連接,也就是在DataReader讀取數(shù)據(jù)的時候不能夠使用IDbConnection.Close()方法關(guān)閉數(shù)據(jù)庫連接;而在使用DataSet獲取數(shù)據(jù)時,可以斷開數(shù)據(jù)庫的連接,因為此時DbDataAdapter已經(jīng)負(fù)責(zé)將數(shù)據(jù)獲取到應(yīng)用服務(wù)器中了。
由于有這樣的區(qū)別,所以在開發(fā)數(shù)據(jù)庫相關(guān)程序時需要特別注意。例如在使用DataReader獲取數(shù)據(jù)后,應(yīng)該主動地關(guān)閉數(shù)據(jù)庫連接,否則可能出現(xiàn)數(shù)據(jù)庫連接池溢出的異常。

DataReader與DataSet最根本的區(qū)別就在于一個是在線處理,另一個是離線處理。在線時,得到的是數(shù)據(jù)庫當(dāng)前的真實數(shù)據(jù),但總是在線的話,增加了網(wǎng)絡(luò)的通訊負(fù)擔(dān)。離線后數(shù)據(jù)拷貝在本地,可以減輕網(wǎng)絡(luò)負(fù)擔(dān),程序處理數(shù)據(jù)更加方便,若離線時間過長,看到的數(shù)據(jù)就不一定是真實的數(shù)據(jù)了。

下面分享下自己Oracle的一個SQLHelper類,提供了兩種方法獲取數(shù)據(jù),還包括存儲過程等。。

/*xcy于11.09修改,原sqlserver的DBHelper*/ using Oracle.ManagedDataAccess.Client; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Web; namespace JGS.Utility { public class SQLHelper { //連接字符串 static string strConn = ConfigurationManager.ConnectionStrings["xcyCon"].ToString(); #region 執(zhí)行查詢,返回DataTable對象----------------------- public static DataTable GetTable(string strSQL) { return GetTable(strSQL, null); } public static DataTable GetTable(string strSQL, OracleParameter[] pas) { return GetTable(strSQL, pas, CommandType.Text); } /// <summary> /// 執(zhí)行查詢,返回DataTable對象 /// </summary> /// <param name="strSQL">sql語句</param> /// <param name="pas">參數(shù)數(shù)組</param> /// <param name="cmdtype">Command類型</param> /// <returns>DataTable對象</returns> public static DataTable GetTable(string strSQL, OracleParameter[] pas, CommandType cmdtype) { DataTable dt = new DataTable(); ; using (OracleConnection conn = new OracleConnection(strConn)) { OracleDataAdapter da = new OracleDataAdapter(strSQL, conn); da.SelectCommand.CommandType = cmdtype; if (pas != null) { da.SelectCommand.Parameters.AddRange(pas); } da.Fill(dt); } return dt; } #endregion #region 執(zhí)行查詢,返回DataSet對象------------------------- public static DataSet GetDataSet(string strSQL) { return GetDataSet(strSQL, null); } public static DataSet GetDataSet(string strSQL, OracleParameter[] pas) { return GetDataSet(strSQL, pas, CommandType.Text); } /// <summary> /// 執(zhí)行查詢,返回DataSet對象 /// </summary> /// <param name="strSQL">sql語句</param> /// <param name="pas">參數(shù)數(shù)組</param> /// <param name="cmdtype">Command類型</param> /// <returns>DataSet對象</returns> public static DataSet GetDataSet(string strSQL, OracleParameter[] pas, CommandType cmdtype) { DataSet dt = new DataSet(); using (OracleConnection conn = new OracleConnection(strConn)) { OracleDataAdapter da = new OracleDataAdapter(strSQL, conn); da.SelectCommand.CommandType = cmdtype; if (pas != null) { da.SelectCommand.Parameters.AddRange(pas); } da.Fill(dt); } return dt; } #endregion #region 執(zhí)行非查詢存儲過程和SQL語句----------------------------- public static int ExcuteProc(string ProcName) { return ExcuteSQL(ProcName, null, CommandType.StoredProcedure); } public static int ExcuteProc(string ProcName, OracleParameter[] pars) { return ExcuteSQL(ProcName, pars, CommandType.StoredProcedure); } public static int ExcuteSQL(string strSQL) { return ExcuteSQL(strSQL, null); } public static int ExcuteSQL(string strSQL, OracleParameter[] paras) { return ExcuteSQL(strSQL, paras, CommandType.Text); } /// 執(zhí)行非查詢存儲過程和SQL語句 /// 增、刪、改 /// </summary> /// <param name="strSQL">要執(zhí)行的SQL語句</param> /// <param name="paras">參數(shù)列表,沒有參數(shù)填入null</param> /// <param name="cmdType">Command類型</param> /// <returns>返回影響行數(shù)</returns> public static int ExcuteSQL(string strSQL, OracleParameter[] paras, CommandType cmdType) { int i = 0; using (OracleConnection conn = new OracleConnection(strConn)) { OracleCommand cmd = new OracleCommand(strSQL, conn); cmd.CommandType = cmdType; if (paras != null) { cmd.Parameters.AddRange(paras); } conn.Open(); i = cmd.ExecuteNonQuery(); conn.Close(); } return i; } #endregion #region 執(zhí)行查詢返回第一行,第一列--------------------------------- public static int ExcuteScalarSQL(string strSQL) { return ExcuteScalarSQL(strSQL, null); } public static int ExcuteScalarSQL(string strSQL, OracleParameter[] paras) { return ExcuteScalarSQL(strSQL, paras, CommandType.Text); } public static int ExcuteScalarProc(string strSQL, OracleParameter[] paras) { return ExcuteScalarSQL(strSQL, paras, CommandType.StoredProcedure); } /// <summary> /// 執(zhí)行SQL語句,返回第一行,第一列 /// </summary> /// <param name="strSQL">要執(zhí)行的SQL語句</param> /// <param name="paras">參數(shù)列表,沒有參數(shù)填入null</param> /// <returns>返回影響行數(shù)</returns> public static int ExcuteScalarSQL(string strSQL, OracleParameter[] paras, CommandType cmdType) { int i = 0; using (OracleConnection conn = new OracleConnection(strConn)) { OracleCommand cmd = new OracleCommand(strSQL, conn); cmd.CommandType = cmdType; if (paras != null) { cmd.Parameters.AddRange(paras); } conn.Open(); i = Convert.ToInt32(cmd.ExecuteScalar()); conn.Close(); } return i; } #endregion #region 查詢獲取單個值------------------------------------ /// <summary> /// 調(diào)用不帶參數(shù)的存儲過程獲取單個值 /// </summary> /// <param name="ProcName"></param> /// <returns></returns> public static object GetObjectByProc(string ProcName) { return GetObjectByProc(ProcName, null); } /// <summary> /// 調(diào)用帶參數(shù)的存儲過程獲取單個值 /// </summary> /// <param name="ProcName"></param> /// <param name="paras"></param> /// <returns></returns> public static object GetObjectByProc(string ProcName, OracleParameter[] paras) { return GetObject(ProcName, paras, CommandType.StoredProcedure); } /// <summary> /// 根據(jù)sql語句獲取單個值 /// </summary> /// <param name="strSQL"></param> /// <returns></returns> public static object GetObject(string strSQL) { return GetObject(strSQL, null); } /// <summary> /// 根據(jù)sql語句 和 參數(shù)數(shù)組獲取單個值 /// </summary> /// <param name="strSQL"></param> /// <param name="paras"></param> /// <returns></returns> public static object GetObject(string strSQL, OracleParameter[] paras) { return GetObject(strSQL, paras, CommandType.Text); } /// <summary> /// 執(zhí)行SQL語句,返回首行首列 /// </summary> /// <param name="strSQL">要執(zhí)行的SQL語句</param> /// <param name="paras">參數(shù)列表,沒有參數(shù)填入null</param> /// <returns>返回的首行首列</returns> public static object GetObject(string strSQL, OracleParameter[] paras, CommandType cmdtype) { object o = null; using (OracleConnection conn = new OracleConnection(strConn)) { OracleCommand cmd = new OracleCommand(strSQL, conn); cmd.CommandType = cmdtype; if (paras != null) { cmd.Parameters.AddRange(paras); } conn.Open(); o = cmd.ExecuteScalar(); conn.Close(); } return o; } #endregion #region 查詢獲取DataReader------------------------------------ /// <summary> /// 調(diào)用不帶參數(shù)的存儲過程,返回DataReader對象 /// </summary> /// <param name="procName">存儲過程名稱</param> /// <returns>DataReader對象</returns> public static OracleDataReader GetReaderByProc(string procName) { return GetReaderByProc(procName, null); } /// <summary> /// 調(diào)用帶有參數(shù)的存儲過程,返回DataReader對象 /// </summary> /// <param name="procName">存儲過程名</param> /// <param name="paras">參數(shù)數(shù)組</param> /// <returns>DataReader對象</returns> public static OracleDataReader GetReaderByProc(string procName, OracleParameter[] paras) { return GetReader(procName, paras, CommandType.StoredProcedure); } /// <summary> /// 根據(jù)sql語句返回DataReader對象 /// </summary> /// <param name="strSQL">sql語句</param> /// <returns>DataReader對象</returns> public static OracleDataReader GetReader(string strSQL) { return GetReader(strSQL, null); } /// <summary> /// 根據(jù)sql語句和參數(shù)返回DataReader對象 /// </summary> /// <param name="strSQL">sql語句</param> /// <param name="paras">參數(shù)數(shù)組</param> /// <returns>DataReader對象</returns> public static OracleDataReader GetReader(string strSQL, OracleParameter[] paras) { return GetReader(strSQL, paras, CommandType.Text); } /// <summary> /// 查詢SQL語句獲取DataReader /// </summary> /// <param name="strSQL">查詢的SQL語句</param> /// <param name="paras">參數(shù)列表,沒有參數(shù)填入null</param> /// <returns>查詢到的DataReader(關(guān)閉該對象的時候,自動關(guān)閉連接)</returns> public static OracleDataReader GetReader(string strSQL, OracleParameter[] paras, CommandType cmdtype) { OracleDataReader sqldr = null; OracleConnection conn = new OracleConnection(strConn); OracleCommand cmd = new OracleCommand(strSQL, conn); cmd.CommandType = cmdtype; if (paras != null) { cmd.Parameters.AddRange(paras); } conn.Open(); //CommandBehavior.CloseConnection的作用是如果關(guān)聯(lián)的DataReader對象關(guān)閉,則連接自動關(guān)閉 sqldr = cmd.ExecuteReader(CommandBehavior.CloseConnection); return sqldr; } #endregion /* #region 批量插入數(shù)據(jù)--------------------------------------------- /// <summary> /// 往數(shù)據(jù)庫中批量插入數(shù)據(jù) /// </summary> /// <param name="sourceDt">數(shù)據(jù)源表</param> /// <param name="targetTable">服務(wù)器上目標(biāo)表</param> public static void BulkToDB(DataTable sourceDt, string targetTable) { OracleConnection conn = new OracleConnection(strConn); SqlBulkCopy bulkCopy = new SqlBulkCopy(conn); //用其它源的數(shù)據(jù)有效批量加載sql server表中 bulkCopy.DestinationTableName = targetTable; //服務(wù)器上目標(biāo)表的名稱 bulkCopy.BatchSize = sourceDt.Rows.Count; //每一批次中的行數(shù) try { conn.Open(); if (sourceDt != null && sourceDt.Rows.Count != 0) bulkCopy.WriteToServer(sourceDt); //將提供的數(shù)據(jù)源中的所有行復(fù)制到目標(biāo)表中 } catch (Exception ex) { throw ex; } finally { conn.Close(); if (bulkCopy != null) bulkCopy.Close(); } } #endregion */ } } 

以上所述是小編給大家介紹的DATASET 與 DATAREADER對象有什么區(qū)別,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識閱讀請移步到MSSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
wwww国产精品欧美| 日韩免费一二三区| 中文字幕免费精品一区高清| 国产91色在线|免| aa亚洲一区一区三区| 性高潮久久久久久久久| 国产欧美日韩精品在线观看| 潘金莲一级淫片aaaaaa播放1| 日韩亚洲成人av在线| 亚洲精品动漫久久久久| 国产视频播放| 一区二区三区免费在线视频| 四虎国产成人永久精品免费| 日本xxxx人| 日韩精品美女| 亚洲一级在线| 中文字幕の友人北条麻妃| 免费久久99精品国产自| 亚洲第一区中文99精品| 欧美大片网站在线观看| 亚洲一区二区三区久久久| 第四色在线视频| 麻豆国产欧美一区二区三区r| 欧洲杯半决赛直播| www.欧美亚洲| 一级片免费在线播放| 黄色毛片网站| 五月天激情婷婷| 日本猛少妇色xxxxx免费网站| 国产性做久久久久久| wwwjizzjizzcom| 国产精品午夜免费| 女教师高潮黄又色视频| 日韩电影第一页| 黄色在线视频网| 亚洲成年电人电影网站| av高清一区二区| 久久精品嫩草影院| 日韩中文字在线| 特大黑人娇小亚洲女mp4| 人妻激情偷乱视频一区二区三区| 国产精品高清在线| aⅴ在线视频男人的天堂| 亚洲欧美综合另类中字| 青青草一区二区三区| 国产chinese男男gaygay网站| 国产精品一区二区果冻传媒| 日韩精品久久久| 国产美女主播一区| 欧美一级特黄视频| 美丽的姑娘在线观看免费动漫| 欧美一二区在线观看| 国产伦精品一区二区三区照片| 日韩精品中文字幕在线| 91香蕉视频在线观看视频| 粗大的内捧猛烈进出视频| 日韩视频永久免费| 欧美人与动xxxxz0oz| 麻豆mv在线看| 美女国产一区二区三区| 8x拔播拔播x8国产精品| 狠狠88综合久久久久综合网| 亚洲伦乱视频| 国产又色又爽又黄刺激在线视频| 久久精品国产69国产精品亚洲| 亚洲天堂福利av| 9191在线| 国产精品自产拍在线观看2019| 久久精品国产68国产精品亚洲| 性视频1819p久久| 黄视频在线观看免费| 欧美日韩国产一二三| 色94色欧美sute亚洲线路二| 91久久伊人青青碰碰婷婷| 黄色一级视频在线观看| 国产a亚洲精品| а√在线中文网新版地址在线| 影音先锋一区二区资源站| 国产免费无遮挡| 另类av导航| 日韩黄色高清视频| 日韩精品一级| 美女福利视频网| 91麻豆精品| 国产无套精品一区二区| 精品久久久久久久久久久久| 四虎永久在线精品免费网址| 国产色产综合色产在线视频| 天堂а√在线中文在线| 视频一区视频二区中文字幕| 久久伊人亚洲| 国产日韩欧美大片| v8888av| 99视频精品全部免费看| 欧美一区久久久| 国产一级揄自揄精品视频| 亚洲成人av一区二区三区| 小小水蜜桃在线观看| eeuss第一页| 91久久精品www人人做人人爽| av无码精品一区二区三区| 欧美高清性xxxxhd| 欧洲美一区二区三区亚洲| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 日韩精品不卡一区二区| 久久美女高清视频| 狠狠操精品视频| 国产高清视频免费在线观看| 国产经典第一页| 欧美日韩精品在线一区| 91九色国产社区在线观看| 欧美猛男男男激情videos| 中国女人一级一次看片| 欧美日一区二区在线观看| 在线观看欧美一区二区| 亚洲人成精品久久久久久| 国产999精品久久久| 国产午夜久久久久| 午夜精品影视国产一区在线麻豆| 久久久久久久电影| 91精品国产91久久久久久最新毛片| 国产成人在线视频网站| 亚洲精品美女在线| 美女国产在线| 免费网站黄在线观看| 欧美男生操女生| 日韩欧美在线第一页| 久久av高潮av无码av喷吹| 国产一区日韩二区欧美三区| 伊人网伊人影院| 国产一区二区精品在线| 日本一区二区三区久久久久久久久不| 一本久道久久综合狠狠爱| 美女网站视频久久| 色综合久久六月婷婷中文字幕| 亚洲 美腿 欧美 偷拍| 日韩不卡在线观看日韩不卡视频| 久久精品成人av| 国产精品无码专区av免费播放| 今天的高清视频免费播放成人| 国产九九九九九| 欧美在线xxxx| 一区视频二区视频| 8x8x8x视频在线观看| 日韩视频在线观看一区二区三区| free性丰满69性欧美| 少妇激情av一区二区| 欧美激情aⅴ一区二区三区| 国产综合精品一区| 国产精品无码专区av在线播放| 欧美日韩午夜在线视频| 91片黄在线观看| 一区二区三区不卡在线视频| 操她视频在线观看| 欧美大片aaa| 中文字幕在线2019| 国产精品久久久久久免费播放| 欧美高清性xxxxhdvideosex| 国产精品入口尤物| 特级毛片www| 欧美日韩一区二区视频在线| 国产精品久久久久久久久鸭| 亚洲视频狠狠| 在线观看av网页| 欧美色网址大全| 国产成人手机高清在线观看网站| 亚洲激情校园春色| 一区二区视频在线免费| 久久夜色精品国产亚洲aⅴ| 亚洲狠狠婷婷综合久久久久图片| 亚洲综合网在线观看| 狠狠色噜噜狠狠狠狠色吗综合| 国产日韩欧美一区二区东京热| 中文字幕日韩经典| 亚洲午夜私人影院| 97精品在线| 尤物视频网站在线观看| 九九热精彩视频| 9色视频在线观看| 天堂在线观看视频| 在线视频一区二区三区| 日韩欧美一区二区三区久久婷婷| 国产女人高潮毛片| 欧美日韩国产一区二区三区| 欧美性生交xxxxx久久久| 久久综合毛片| 久久国产午夜精品理论片最新版本| 日本精品裸体写真集在线观看| 亚洲色图综合久久| www红色一片_亚洲成a人片在线观看_| а√天堂8资源在线官网| 综合色婷婷一区二区亚洲欧美国产| 日本一区二区免费看| 777午夜精品免费视频| 91亚洲自偷观看高清| 欧美熟乱第一页| 香蕉乱码成人久久天堂爱免费| 伊人国产在线看一| 奇米精品在线| 日本免费不卡一区二区| 成人精品免费网站| 激情五月色婷婷| 丁香花在线电影小说观看| 久久美女艺术照精彩视频福利播放| 欧美毛片免费观看| 日韩电影在线免费看| 亚洲图片欧美在线| 一区二区三区网| 久久精品免费电影| 国产日韩在线不卡| 试看120秒一区二区三区| 人人干人人插| 精品一区二区三区高清免费不卡| 国产黄色在线看| 日韩电影二区| 久久不射网站| 91一区二区三区在线观看| 亚洲精品视频在线观看视频| 亚洲成熟少妇视频在线观看| 久久久99精品| 成人黄色免费片| 久久综合婷婷| av大片在线观看| 99久久国产综合色|国产精品| 97超碰蝌蚪网人人做人人爽| 日韩精品极品毛片系列视频| 免费一区二区在线观看| 电影天堂久久| 亚洲不卡在线播放| 17c精品麻豆一区二区免费| www亚洲视频| 欧美久久久久久久久久| 日批视频在线免费看| 国产精品pans私拍| 国产精品ⅴa在线观看h| 国产理论电影在线| 亚洲五月六月| av一本久道久久综合久久鬼色| 一区视频在线| 色悠悠国产精品| 日本在线观看中文字幕| 欧美激情国产日韩精品一区18| www.色播.com| 小小的日本在线观看免费色网| 欧美精品一区二区在线观看| 国产成人手机视频| 红桃视频欧美| 亚洲精品人成网在线播放影院| 国产美女主播视频一区| 顶级黑人搡bbw搡bbbb搡| 亚洲av成人精品日韩在线播放| 99久久人妻精品免费二区| 日韩免费观看高清完整版在线观看| 国产精品久久久免费看| xx欧美视频| 欧美性受xxxx黒人xyx性爽| 可以免费看污视频的网站| 国产日产一区二区三区| 亚洲综合网站| 韩国在线一区| 精品成人av一区二区三区| 欧美激情视频在线免费观看 欧美视频免费一| 欧美性猛交xxx乱大交3蜜桃| 三级国产三级在线| 先锋影音av中文资源| 国产裸体舞一区二区三区| jizz性欧美23| 岳张嘴把我的精子吞下去| 欧美疯狂性受xxxxx另类| 日韩精品中文字幕第1页| 成人免费一区二区三区视频网站| 在线国产成人影院| 国产99999| 久久综合九色综合欧美狠狠| 日韩免费不卡视频| 日韩精品视频在线观看视频| 黄网站色大毛片| 一级久久久久久久| 四虎成人免费影院| 欧美美女被草| 91精品1区| 97精品超碰一区二区三区| 青青草国产免费自拍| 91成人免费观看网站| 国产精品成人免费精品自在线观看| www视频在线观看com| 91av免费观看91av精品在线| 一区二区成人在线| 国产视频精品久久| 91免费在线看片| 成人一区二区| 国产91视觉| 男人j桶女人的网站| 在线一区二区三区做爰视频网站| 成年网站在线播放| 羞羞视频在线观看欧美| 国内精品偷拍| 国产伦精品一区二区三区精品视频| 久久免费看少妇高潮v片特黄| 国产欧美日本一区视频| 日韩中文字幕av| 内射一区二区三区| 亚洲天天在线日亚洲洲精| 亚洲精品va在线观看| 精品无人区无码乱码毛片国产| 欧美亚洲综合另类| 亚洲熟女毛茸茸| 日韩精品免费观看| 日本网站在线免费观看视频| 手机免费看av网站| 欧美视频在线视频| 久久久久国产精品区片区无码| 成人无码精品1区2区3区免费看| 欧美色中文字幕| 亚洲第一精品在线观看| 成人免费视频网站入口| 中文在线中文字幕| 国产免费av网站| 亚洲一区二区三区视频在线播放| 亚洲国产成人在线| 日韩avvvv在线播放| 色8久久精品久久久久久蜜| 一个人看的www在线免费观看| videoxxxx另类日本极品| 国产视频亚洲| 91精品国自产在线观看| 国产ts丝袜人妖系列视频| 亚洲视频天天射|