韩剧1988免费观看全集_久久影视三级福利片_亚洲视频在线观看免费_在线观看欧美日韩_国产亚洲激情在线_亚洲精品美女久久久_欧美国产日韩一区二区在线观看_91在线观看免费高清完整版在线观看_日韩av免费看_国产又爽又黄的激情精品视频_琪琪亚洲精品午夜在线_欧美性猛xxx_不卡毛片在线看_国产亚洲日本欧美韩国_91国内在线视频_精品国产福利视频

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

ADO.NET中的多數(shù)據(jù)表設(shè)置淺析—讀取

ADO.NET中的多數(shù)據(jù)表設(shè)置淺析—讀取

更新時(shí)間:2022-10-14 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

ADO.NET中的多數(shù)據(jù)表操作淺析—讀取

作者:鄭佐??????? 2004-8-5

???????? 在開發(fā)基于.NET平臺(tái)的數(shù)據(jù)庫應(yīng)用程序時(shí),我們一般都會(huì)用到DataSet,作為ADO.NET的核心類它為我們提供了強(qiáng)大的功能,而整個(gè)看上去就像是放在內(nèi)存內(nèi)的一個(gè)小型數(shù)據(jù)庫,內(nèi)部包括了DataTable、DataView、DataRow、DataColumn、Constraint以及DataRelation。當(dāng)初看到它時(shí)真的是有點(diǎn)興奮。

???????? 下面根據(jù)我的一些經(jīng)驗(yàn)來舉例說明在ADO.NET中的多表填充、關(guān)聯(lián)表更新以及多個(gè)Command對(duì)象執(zhí)行過程中啟用事務(wù)的操作。歡迎大家交流,或在Blog上留言。

????????

一、準(zhǔn)備工作

???????? 對(duì)于NorthWind數(shù)據(jù)庫大家都比較熟悉,所以這里拿它為例,我把Customers(客戶表)、Orders(訂單表)、Order Details(訂單詳細(xì)表)合起來建立了一個(gè)類型化的數(shù)據(jù)集,類型名稱為DatasetOrders,每個(gè)表只包括一些字段,下面是在Visual Studio .NET中建立的一個(gè)截圖:

?

圖1-1

上面建立了兩個(gè)關(guān)系表示為Customers —> Orders —>Order Details。因?yàn)镺rders表的OrderID字段為自動(dòng)增長(zhǎng)列,這里把就把它的AutoIncrementSeed和AutoIncrementStep值設(shè)置成了-1,這在實(shí)際添加訂單的過程中可能會(huì)比較明顯,不過不設(shè)也沒問題。

????????

二.填充數(shù)據(jù)集

建立一個(gè)窗體程序來演示實(shí)際的操作,界面如下:



圖2-1

整個(gè)應(yīng)用程序就是一個(gè)Form,上面的三個(gè)DataGrid分別用來顯示相關(guān)表的數(shù)據(jù),不過他們是互動(dòng)的。另外的兩個(gè)單選框用來決定更新數(shù)據(jù)的方式,兩個(gè)按鈕正如他們的名稱來完成相應(yīng)的功能。

這里我們用一個(gè)DataAdapter來完成數(shù)據(jù)集的填充,執(zhí)行的存儲(chǔ)過程如下:

CREATE PROCEDURE GetCustomerOrdersInfo

AS

SELECT CustomerID,CompanyName,ContactName FROM Customers WHERE CustomerID LIKE 'A%'

?

SELECT OrderID,OrderDate,CustomerID FROM Orders? WHERE CustomerID IN

(SELECT CustomerID FROM Customers WHERE CustomerID LIKE 'A%')

?

SELECT OrderID,ProductID,UnitPrice,Quantity,Discount FROM [Order Details] WHERE OrderID IN

(SELECT OrderID FROM Orders? WHERE CustomerID IN

(SELECT CustomerID FROM Customers WHERE CustomerID LIKE 'A%'))

?

GO

?

為了減少數(shù)據(jù)量,這里只取了CustomerID以’A’開頭的數(shù)據(jù)。

建立DataAccess類來管理窗體同數(shù)據(jù)層的交互:

using System;

using System.Data;

using System.Data.SqlClient;

using Microsoft.ApplicationBlocks.Data;

?

namespace WinformTest

{

???? public class DataAccess

???? {

???????? private string _connstring = "data source=(local);initial catalog=Northwind;uid=csharp;pwd=c#.net2004;";

???????? private SqlConnection _conn;

???????? ///構(gòu)造函數(shù)

public DataAccess()

???????? {

????????????? _conn = new SqlConnection(_connstring);

}

下面的函數(shù)完成單個(gè)數(shù)據(jù)適配器來完成數(shù)據(jù)集的填充,

public void FillCustomerOrdersInfo(DatasetOrders ds)

???? ???? {

????????????? SqlCommand comm = new SqlCommand("GetCustomerOrdersInfo",_conn);

????????????? comm.CommandType = CommandType.StoredProcedure;

????????????? SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);

????????????? dataAdapter.TableMappings.Add("Table","Customers");

????????????? dataAdapter.TableMappings.Add("Table1","Orders");

????????????? dataAdapter.TableMappings.Add("Table2","Order Details");

????????????? dataAdapter.Fill(ds);

???????? }

如果使用SqlHelper來填充那就更簡(jiǎn)單了,

???????? public void FillCustomerOrdersInfoWithSqlHelper(DatasetOrders ds)

???????? {???????????? SqlHelper.FillDataset(_connstring,CommandType.StoredProcedure,"GetCustomerOrdersInfo",ds,new string[]{"Customers","Orders","Order Details"});

???????? }

叉開話題提一下,Data Access Application Block 2.0中的SqlHelper.FillDataset這個(gè)方法超過兩個(gè)表的填充時(shí)會(huì)出現(xiàn)錯(cuò)誤,其實(shí)里面的邏輯是錯(cuò)的,只不過兩個(gè)表的時(shí)候剛好湊巧,下面是從里面截的代碼:

private static void FillDataset(SqlConnection connection, SqlTransaction transaction, CommandType commandType,

????????????? string commandText, DataSet dataSet, string[] tableNames,

????????????? params SqlParameter[] commandParameters)

???????? {

????????????? if( connection == null ) throw new ArgumentNullException( "connection" );

????????????? if( dataSet == null ) throw new ArgumentNullException( "dataSet" );

????????????? SqlCommand command = new SqlCommand();

????????????? bool mustCloseConnection = false;

????????????? PrepareCommand(command, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection );

??? ????????? using( SqlDataAdapter dataAdapter = new SqlDataAdapter(command) )

????????????? {

???????? ????????? if (tableNames != null && tableNames.Length > 0)

?????????????????? {

?????????????????????? string tableName = "Table";

?????????????????????? for (int index=0; index < tableNames.Length; index++)

?????????????????????? {

??????????????????????????? if( tableNames[index] == null || tableNames[index].Length == 0 )

???????????????????????????????? throw new ArgumentException( "The tableNames parameter must contain a list of tables, a value was provided as null or empty string.", "tableNames" );

??????????????????????????? tableName += (index + 1).ToString();//這里出現(xiàn)錯(cuò)誤

?????????????????????? }

?????????????????? }

?????????????????? dataAdapter.Fill(dataSet);

?????????????????? command.Parameters.Clear();

????????????? }

????????????? if( mustCloseConnection )

?????????????????? connection.Close();

???????? }

?

這里把tableName += (index + 1).ToString();修改成

dataAdapter.TableMappings.Add((index>0)?(tableName+index.ToString()):tableName, tableNames[index]);就能解決問題。

?

接下來看看窗體程序的代碼:

public class Form1 : System.Windows.Forms.Form

???? {

???????? private DataAccess _dataAccess;

???????? private DatasetOrders _ds;

???????? //……

???????? //構(gòu)造函數(shù)

???????? public Form1()

???????? {

????????????? InitializeComponent();

????????????? _dataAccess = new DataAccess();

????????????? _ds = new DatasetOrders();

????????????? _ds.EnforceConstraints = false; //關(guān)閉約束檢查,提高數(shù)據(jù)填充效率

????????????? this.dataGridCustomers.DataSource = _ds;

????????????? this.dataGridCustomers.DataMember = _ds.Customers.TableName;

????????????? this.dataGridOrders.DataSource = _ds;

????????????? this.dataGridOrders.DataMember = _ds.Customers.TableName+"."+_ds.Customers.ChildRelations[0].RelationName;

????????????? this.dataGridOrderDetails.DataSource = _ds;

????????????? this.dataGridOrderDetails.DataMember = _ds.Customers.TableName+"."+_ds.Customers.ChildRelations[0].RelationName+"."+_ds.Orders.ChildRelations[0].RelationName;

???????? }

對(duì)于上面的三個(gè)表的動(dòng)態(tài)關(guān)聯(lián),你也可以使用SetDataBinding方法來完成數(shù)據(jù)的動(dòng)態(tài)綁定,而不是分別指定DataGride的DataSource和DataMemger屬性。

this.dataGridCustomers.SetDataBinding(_ds,_ds.Customers.TableName);

this.dataGridOrders.SetDataBinding(_ds,_ds.Customers.TableName+"."+_ds.Customers.ChildRelations[0].RelationName);

this.dataGridOrderDetails.SetDataBinding(_ds,_ds.Customers.TableName+"."+_ds.Customers.ChildRelations[0].RelationName+"."+_ds.Orders.ChildRelations[0].RelationName);

}

數(shù)據(jù)填充事件處理如下:????????????????????????

private void buttonFillData_Click(object sender, System.EventArgs e)

???????? {

????????????? _ds.Clear();//重新填充數(shù)據(jù)集

????????????? _dataAccess.FillCustomerOrdersInfo(_ds);

????????????? //_dataAccess.FillCustomerOrdersInfoWithSqlHelper(_ds);

???????? }

執(zhí)行上面的事件處理函數(shù)我們會(huì)看到數(shù)據(jù)顯示到對(duì)應(yīng)的DataGrid上,如(圖2-1)所示。

如果使用數(shù)據(jù)讀取器獲取多表紀(jì)錄下面是實(shí)現(xiàn)的一種方式(參考):

SqlCommand comm = new SqlCommand("GetCustomerOrdersInfo",_conn);

comm.CommandType = CommandType.StoredProcedure;

_conn.Open();

SqlDataReader reader = comm.ExecuteReader();

do

{

???? while(reader.Read())

???? {

???????? Console.WriteLine(reader[0].ToString());//獲取數(shù)據(jù)代碼

???? }

}while(reader.NextResult());

Console.ReadLine();

_conn.Close();

?

?


溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
夜夜骑日日操| 久久综合久久美利坚合众国| 欧美日韩免费不卡视频一区二区三区| 国产va免费精品高清在线| 超碰在线资源站| 最近更新在线中文字幕一页| 强开小嫩苞一区二区三区视频| 欧洲成人午夜免费大片| 国产变态拳头交视频一区二区| 中文字幕一区二区三区av| 免费毛片大全| 亚洲色成人网站www永久四虎| 亚洲综合激情网| 国产精品日韩欧美一区二区| free性中国hd国语露脸| 国产一区二区在线免费| av蓝导航精品导航| 精品在线播放| 91精品一区二区三区蜜桃| 欧美综合天天夜夜久久| 欧美日韩国产系列| av片在线看| 全国精品久久少妇| 少妇高潮久久久| 日韩在线不卡一区| 亚洲一区二区三区在线免费| 日本老师69xxx| 中国av免费看| 亚洲欧美激情小说另类| 天天免费综合色| 欧美精品国产一区二区| 欧美成人在线直播| 中文字幕第三页| 久久草av在线| 欧美日韩国产精品一区二区不卡中文| 午夜国产一区| 欧美日韩亚洲一区二区三区| 成人性生交大片免费看中文网站| 亚洲91中文字幕无线码三区| 我爱我色成人网| 999免费视频| 日韩成人免费看| 99久久99久久免费精品蜜臀| 天天色棕合合合合合合合| 亚洲一区日韩精品中文字幕| 在线观看精品| gogo高清在线播放免费| 91麻豆精品国产91久久久久推荐资源| 水莓100国产免费av在线播放| 国产精品亚洲成在人线| 中文字幕av在线一区二区三区| 亚洲国产成人久久| 欧美精品色一区二区三区| 中文字幕人妻一区二区三区在线视频| 欧洲一级视频| 在线观看日韩精品| h片精品在线观看| 色综合综合网| 国产中文字幕一区二区| a在线视频播放观看免费观看| 91麻豆精品一二三区在线| 2018av| 在线观看国产免费视频| 午夜精品影视国产一区在线麻豆| 69久久夜色精品国产69乱青草| 亚洲男人天天操| www.亚洲免费视频| 国产一区二区三区四区尤物| 在线免费观看不卡av| 亚洲另类自拍| 成人毛片高清视频观看| 久久久影视精品| 黄色成人在线免费| 在线电影国产精品| 国产一区二区0| 日本一区免费网站| 国产精品对白一区二区三区| jvid福利写真一区二区三区| 99超碰在线观看| 蜜桃av色综合| 无码人妻丰满熟妇啪啪网站| 国产绳艺sm调教室论坛| 久久精品一级| 欧美理论视频| 亚洲日本护士毛茸茸| 在线国产亚洲欧美| 亚洲视频在线网| 在线视频福利一区| 日韩三级中文字幕| 蜜芽tv福利在线视频| 午夜羞羞视频| 午夜av电影一区| 欧美性生交大片免费| 538任你躁在线精品视频网站| 免费在线观看a| 日韩一级二级| 国产av无码专区亚洲a∨毛片| 爽爽爽在线观看| 国产精品suv一区二区88| 国产精品嫩草影院在线看| 亚洲国产无码精品| 男生裸体视频网站| 91精品国产高清久久久久久久久| 在线观看日产精品| 免费视频一区| 一区二区三区国产好的精华液| 亚洲一区制服诱惑| 2021中文字幕在线| 日韩免费在线免费观看| 91精品蜜臀在线一区尤物| yes4444视频在线观看| 美女露胸视频在线观看| 女同互添互慰av毛片观看| 亚洲卡通欧美制服中文| 在哪里可以看毛片| jizzjizzwww| 欧美午夜影院在线视频| 国产亚洲欧洲在线| www.偷拍.com| 亚洲深夜福利在线观看| 色综合小说天天综合网| 国产精品国产三级国产aⅴ中文| 久久久久久久国产精品视频| 国产真人真事毛片视频| 国产精品丝袜久久久久久高清| 日本aⅴ精品一区二区三区| 日韩精品无码一区二区三区久久久| 884aa四虎影成人精品一区| 欧美午夜理伦三级在线观看| 四虎永久免费在线| 亚洲国产一区二区三区在线| 亚洲精品乱码久久久久久久| 永久免费黄色片| 欧美日韩一区二区三区四区| 顶级欧美妇高清xxxxx| 欧美精选一区| 欧美经典一区二区三区| 亚洲v天堂v手机在线| 国模大尺度视频| 亚洲一卡二卡三卡四卡无卡久久| 91小仙女jk白丝袜呻吟| 亚洲a∨精品一区二区三区导航| 久久狠狠一本精品综合网| 美女视频久久黄| 久久精品久久久久久国产 免费| 亚洲综合在线小说| 亚洲欧美高清| 亚洲欧洲中文天堂| 美女网站免费观看| 天堂а√在线中文在线新版| 91在线观看视频| 亚洲欧美卡通动漫| 国产丰满果冻videossex| 电影一区二区三区久久免费观看| 精品久久久三级| 特黄特色特刺激视频免费播放| 青青草97国产精品免费观看| 国产精品毛片久久久久久久久久99999999| а天堂中文在线资源| 欧美日韩三级在线| 亚洲一区二三区| 国产馆av播放| 欧美日韩不卡在线视频| 国产成人麻豆精品午夜在线| 黄色日韩网站| 日日夜夜精品视频免费| 午夜国产一级| 日韩人妻无码一区二区三区99| 国产浴室偷窥在线播放| 日本五十肥熟交尾| 色先锋av男人资源先锋影院| 欧美3p视频在线观看| 欧美成人一区二区视频| 久久日文中文字幕乱码| 欧美丰满熟妇xxxxx| 91香蕉视频污在线观看| 青青青草网站免费视频在线观看| 久久免费美女视频| 97影院手机在线观看| 久草视频手机在线观看| 性做久久久久久免费观看欧美| 中文字幕乱码人妻综合二区三区| 国产呦小j女精品视频| 91黄色免费视频| 国产精品1区2区3区| 蜜臀av一区| 北条麻妃在线一区二区| 美女三级黄色片| 99久久国产宗和精品1上映| 亚洲爱情岛论坛永久| 青青a在线精品免费观看| 国产精品嫩模av在线| wwwxxx在线观看| 亚洲国产精品毛片av不卡在线| 国产精品入口麻豆电影| 国产日韩一区欧美| 国产日产久久高清欧美一区| 国产盗摄视频一区二区三区| 岛国精品在线| 成人在线免费看黄| 日本午夜精品| 动漫一区在线| 三级黄色录像视频| 高清不卡一区二区在线| 欧美亚洲在线日韩| 欧美韩国日本不卡| 国产精品一区二区三区免费视频| 男人在线视频资源| 丁香激情综合国产| 狠狠鲁男人天堂| 日韩精品视频播放| 日韩精彩视频在线观看| 国产91绿帽单男绿奴| 一区二区三区欧美激情| 亚洲精品久久久久中文字幕欢迎你| 亚洲国产精品麻豆| 视频精品国内| 成人免费视频入口| 欧美国产一级片| 性欧美ⅴideo另类hd| 国产在线98福利播放视频| 精品无人乱码一区二区三区的优势| 日一区二区三区| 亚洲精品一区二三区| 在线观看国产一区二区| 亚洲视频你懂的| 亚洲毛片在线观看.| 日韩欧美有码在线| 青青草影院在线观看| www久久久久久久| thepron国产精品| 欧美五码在线| 成人久久久久久久久| 超薄肉色丝袜一二三| 97理论电影| 日韩高清有码在线| 欧美一区二区三区视频免费| 久久精品观看| 亚洲v国产v欧美v久久久久久| 欧美国产日韩亚洲一区| av网站免费大全| 国产精品二区在线观看| 霍思燕三级露全乳照| 国产精品欧美亚洲777777| 我要看一级黄色录像| 樱花影视一区二区| av大片在线看| 久久伦理在线| 亚洲中文字幕无码一区| 一区二区三区四区视频精品免费| 中文字幕 视频一区| 黑人欧美xxxx| 国产又粗又猛又爽视频| 狠狠色狠狠色综合日日五| 在线观看wwww| 在线免费观看日本一区| 三级精品视频久久久久| 国产日韩视频| 精品免费99久久| 成人免费看片网站| 欧美猛男同性videos| 欧美一区三区| 免费看黄色三级| 中文字幕+乱码+中文乱码91| 亚洲视频免费在线观看| 日日夜夜人人| 日本中文字幕久久| 久9re热视频这里只有精品| 18黄暴禁片在线观看| av免费观看国产| 捆绑调教美女网站视频一区| 一色桃子av在线| 中文成人无字幕乱码精品区| 久久人人爽人人爽| 自己做鸭怎么接单寻找客源| 2021久久国产精品不只是精品| 浮力影院欧美三级日本三级| 不卡中文字幕| 91网站最新网址| 亚洲天堂网在线播放| 亚洲av无码不卡| 中文字幕 亚洲视频| 超碰91人人草人人干| 在线看片欧美| 欧美日韩一区二区高清| 第一av在线| 中文字幕一区二区三区四区在线视频| 欧美日韩激情视频8区| 狠狠做深爱婷婷综合一区| 九九九九精品| 一区二区毛片| 日韩精品亚洲人成在线观看| 国产在线不卡av| 精品国产免费一区二区三区香蕉| 亚洲成人精品一区| 日韩高清欧美高清| **欧美日韩在线观看| 五月婷婷综合激情| 成人亚洲一区二区三区| 丝袜美腿玉足3d专区一区| 一区二区三区黄色片| 成人精品久久一区二区三区| 香蕉久久夜色精品国产更新时间| 亚洲精品网站在线播放gif| 国产一区二区三区网| 国内自拍亚洲| 亚洲精品网址在线观看| 欧美一级二级三级区| 国产99久久精品一区二区永久免费| 中文字幕亚洲欧美日韩2019| 欧美无人区码suv| 久久久久久无码精品大片| 日本黄色网址大全| 国产欧美日本| 午夜激情久久| 中文字幕在线观看免费视频| 最新亚洲国产精品| 亚洲а∨天堂久久精品喷水| 亚洲第一综合天堂另类专| 国产精品不卡在线| 欧美日韩国产精品激情在线播放| 国产日韩中文在线| 免费免费啪视频在线观看| 国产高清久久久久| 国产成人综合在线视频| 欧美在线色图| 国产农村av| 成人黄页网站视频|