ADO.NET 快速入門(四):從數據庫填充 DataSet

從數據庫獲取數據很容易,處理數據更容易。若是想要從數據庫獲取只進、只讀的數據流結果集,你可使用 DataReader 執行命令而且檢索它。關於如何使用 DataReader,請參考: 使用 OLE DB 檢索數據 使用 SQL Server 檢索數據 。更多關於綁定、瀏覽、或者遠程處理數據查詢結果集的操做,你能夠以下例所示把結果集放到 DataSet 裏。
 
請記住最重的是,DataSet 是一種獨立的有別於數據存儲的數據結構。儘管示例從數據庫獲取數據,可是數據來源是無所謂的;DataSet 老是呈現出一種統一的編程模型。這是一個簡單的關於關係型數據庫收集數據的示例。因爲數據來源不可知,DataSet 上沒有加載、打開、或者執行操做。本節描述瞭如何使用 SqlDataAdapter 從數據庫獲取數據填充到DataSet。
 
你可使用 Add 方法添加數據到 DataSet(請參考: 從 DataSet 更新數據庫),或者直接使用原生的XML方法(請參考: 讀寫 XML 數據)推送數據。SqlDataAdapter 除了能夠用於從數據庫檢索數據,也能夠反向推送數據回數據庫。這裏,重點關注的是獲取輸出數據。
 
第一步是構建 SqlDataAdapter。也可使用 SqlCommand 來構建 SqlDataAdapter。
 
    String SelectCmdString = "select * from customers";
    SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(SelectCmdString, myConnection);
    
    SqlCommand mySelectCommand = New SqlCommand("select * from customers", myConnection);
    SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(mySelectCommand);

 

除了 Fill 和 Update 方法之外,SqlDataAdapter 對象和 SqlCommand 對象很是相似。Fill 方法填充 DataSet 對象。Update 方法獲取DataSet 的改動,而且把改動反映回數據庫。這是 DataAdapter 上指定的4個命令完成的。這些命令是:SelectCommand、UpdateCommand、InsertCommand,和 DeleteCommand。你能夠顯式的指定這些命令,在運行時控制語句執行變更,包括使用存儲過程。對於特別的場景,CommandBuilder 對象能夠基於 select 語句  (參考: 從 DataSet 更新數據庫). 在運行時建立他們。然而,運行時建立須要一次額外的服務器往返以便收集必要的元數據,所以在設計時顯式提供 insert、update、和 delete 命令能夠獲得更好的運行時性能。
 
備註:Visual Studio 創建了類型化 SqlDataAdapters 和 DataSets,而且最終爲你建立存儲過程。經過使用 ComponentDesigner 和數據庫對象探究這個特性。
 
一旦建立了 SqlDataAdapter 對象,你就能夠經過它來填充 DataSet。
 
    myDataSet = new DataSet();
    mySqlDataAdapter.Fill(myDataSet,"Customers");

 

當前的 DataSet 保存查詢結果集。實際上,DataSet 能夠從多個查詢甚相當聯他們的查詢(請參考: 使用關係型數據)保存結果集。由於保存了多個結果集,因此 DataSet 包含了一組表。請注意 Fill 方法容許「Customers」做爲第二個參數。這是填充到 DataSet 中的表名。若是表不存在,就爲你建立它。
 
由於數據是存儲在表裏一組行裏面,因此你能夠很容易使用 foreach 語句來迭代這些行:
 
    foreach (DataRow myDataRow in myDataSet.Tables["Customers"].Rows)
    {
      Console.WriteLine(myDataRow["CustomerId"].ToString());
    }

 

實際上,在列上一樣可使用foreach語句。下面的例子演示了本節全部的代碼。瞭解如何更新數據回數據庫,請參考: 從 DataSet 更新數據庫
 
    public class GettingDataExample
    {
        public void Run()
        {
            SqlConnection myConnection = new SqlConnection("server=(local);Integrated Security=SSPI;database=northwind");
            
            string selectCmdString = "SELECT * FROM Customers";

            // 構建 SqlDataAdapter
            SqlDataAdapter myDataAdapter1 = new SqlDataAdapter(selectCmdString, myConnection);

            // 使用 SqlCommand 構建 SqlDataAdapter
            SqlCommand mySelectCommand = new SqlCommand(selectCmdString, myConnection);
            SqlDataAdapter myDataAdapter2 = new SqlDataAdapter(mySelectCommand);

            DataSet myDataSet = new DataSet();
            myDataAdapter1.Fill(myDataSet, "Customers");

            // 迭代 DataSet
            foreach (DataRow myDataRow in myDataSet.Tables["Customers"].Rows)
            {
                Console.WriteLine(myDataRow["CustomerId"].ToString());
            }
        }
    }

 

 
相關文章
相關標籤/搜索