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());
            }
        }
    }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM