ADONET有兩個重要組成部分即DataSet和NET數據提供者在前幾節的例子中已經使用了DataSet和SqlDataAdapter可能讀者對這些類還不熟悉本文將進行詳細介紹
NET數據提供對象分為三類包括SQL數據提供者OLE DB數據提供者和ODBC數據提供者其中SQL數據提供者僅支持SQL Server及更高版本OLE DB數據提供者支持AccessOracle和SQL Server等ODBC數據提供者支持的類型較多分別包括AccessOracleSQL ServerMySql和VFP(Visual FoxPro)等
在NET數據提供者中定義的對象前面必須帶有該提供者的標志如上一節使用的SqlDataAdapter因為它定義在SQL數據提供者內所以要加前綴Sql在另兩個數據提供者內一般加前綴OleDb和Odbc
NET數據提供者的對象包括ConnectionCommandCommandBuilderDataReader和DataAdapter
下面通過例子對以上對象進行說明
()打開VS在D:\C#\ch目錄下建立名為ProviderTest的Windows應用程序
()打開工程為當前窗體添加一個TextBox和一個非類型化的DataSet從工具箱中直接將DataSet拖入當前窗體
()本例主要通過代碼方式將數據庫中的數據寫入到DataSet然後再從DataSet中表的列名導出這需要引入兩個命名空間SystemData和SystemDataSqlClient接著為當前窗體的Load事件添加如下代碼
SqlConnection sc = new SqlConnection(@Data Source=(local);Integrated Security=SSPI;+Initial Catalog=StudentInf);
scOpen();
SqlCommand cmd = new SqlCommand();
cmdCommandText = select NameSexAge from Class;
cmdCommandType = CommandTypeText;
cmdConnection = sc;
SqlDataAdapter sd = new SqlDataAdapter();
sdSelectCommand = cmd;
sdFill(thisdataSet);
textBoxText = thisdataSetTables[]Columns[]ColumnName;
scClose();
本例仍然采用本章前面自建的數據庫StudentInf先將它的前三列數據填充到dataSet中再從其中讀出第一列的列名
下面進行代碼解釋
第一個需要解釋的是連接對象SqlConnection它包含在SystemDataSqlClient命名空間中它提供了到數據源的連接及相關連接細節創建語法如下所示
SqlConnection sc = new SqlConnection(@Data Source=(local);Integrated Security=SSPI;+Initial Catalog= StudentInf);
scOpen();
Data Source是指訪問的SQL Server的名稱如果SQL Server運行在本機上直接用local即可Integrated Security是指登錄到數據庫時采用內置集成安全這樣可以省去用戶名和密碼SSPI全稱為Security Support Provider Interface它用於指定鄧錄數據庫時的安全類型Initial Catalog表示需要登錄的數據庫名
建立完連接對象還需要對它進行打開這裡選擇SqlConnection的Open()方法
建立並打開連接對象以後下面要做的工作是可能是查詢修改或刪除數據庫中的內容顯然這裡需要SQL命令這也就是SqlCommand對象所要完成的事情如下所示
SqlCommand cmd = new SqlCommand();
cmdCommandText = select NameSexAge from Class;
cmdCommandType = CommandTypeText;
cmdConnection = sc;
CommandText是指獲取或設置對數據源執行的TransactSQL語句
select NameSexAge from Class
表示從表Class中選擇NameSex和Age 三列數據CommandType用於解釋CommandText的類型它有三個選擇項包括StoredProcedure(存儲過程的名稱)TableDirect(表的名稱)和Text(SQL文本命令)最後還需要將該命令對象關聯到打開的數據連接
構建完SQL命令後SqlCommand還需要被執行它的執行方法有很多種如表所
表 SqlCommand的執行方法
方 法 名
說 明
ExecuteNonQuery()
返回受影響的行數
ExecuteReader()
返回SqlDataReader()對象
ExecuteXmlReader()
返回XmlReader對象
ExecuteScaler()
返回結果集中的首行首列
其中前三種方法支持異步操作
SqlDataAdapter在前兩節已經介紹過只是當時采用的是圖形化的方式它能用於填充DataSet對象在填充DataSet之前它必須先對數據庫中需要操作的數據執行一些SQL命令主要包括以下幾種方式
SelectCommand //執行選擇操作
DeleteCommand //執行刪除操作
UpdateCommand //執行更新操作
InsertCommand //執行插入操作
TableMappings //執行表映射
因為本例的命令對象是要執行選擇操作所以采用SelectCommand如下所示
sdSelectCommand = cmd;
接下來是調用SqlDataAdapter的Fill()方法完成對dataSet的填充
在前面部分曾提到DataSet是以表格的形式存放數據所以DataSet裡能包含表對象DataSet中能包含一個或多個表如果需要對這些表進行訪問采用如下形式
dataSetTables[]Columns[]ColumnName
表示訪問第一個表中第一列的列名
最後訪問完數據庫還應該關閉連接
scClose();
通過以上例子的學習讀者應該對ADONET中的NET數據提供者有了更進一步的理解在上例中細心的讀者可能會發現還遺漏了兩個對象沒有解釋即SqlCommandBuilder對象和SqlDataReader對象
SqlCommandBuilder用於創建SQL命令它的用法和SqlCommand類似具體使用如下所示
SqlConnection sc = new SqlConnection(@Data Source=(local);Integrated Security=SSPI;+Initial Catalog= StudentInf);
scOpen();
SqlDataAdapter sd = new SqlDataAdapter(select NameSexAge from Classsc);
SqlCommandBuilder scb = new SqlCommandBuilder(sd);
sdFill(thisdataSet);
將實例化的SqlDataAdapter作為參數傳遞給SqlCommandBuilder構造函數時SqlCommandBuilder能自動生成SQL語句
SqlDataReader對象提供一種讀取數據庫中行的只進流的方式它不能被繼承且必須實例化後才能使用以下是它的簡單用法
SqlDataReader sdr = cmdExecuteReader(); //cmd為SqlCommand對象的實例
while (sdrRead())
{
……
}
sdrClose();
SqlDataReader最大的優勢是能簡單而且快速地讀取數據
From:http://tw.wingwit.com/Article/program/net/201311/11838.html