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

 

 
相关文章
相关标签/搜索