使用数据集和数据适配器

数据集的构造函数是重载的
DataSet ds =new DataSet();
DataSet ds =new DataSet("MyDataSet");

如果使用无参数的构造函数,数据库的名称就默认为NewDataSet,如果需要多个数据集,最好使用另一个构造函数,并显式地命名它。但总是可以使用DataSetName属性改变数据集的名称。
填充数据集有两种方式:
1、使用数据适配器
2、从XML文档中读取数据

用数据适配器填充数据集实例:

View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace PopDataSet
{
    class Program
    {
        static void Main(string[] args)
        {
            string connString = @"
            server = .;
            integrated security =true;
            database =northwind";
            
            string sql = @"select productname,unitprice 
            from products 
            where unitprice <20";

            SqlConnection conn = new SqlConnection(connString);
            try
            {
                conn.Open();
                SqlDataAdapter da = new SqlDataAdapter(sql, conn);

                DataSet ds = new DataSet();
                da.Fill(ds, "products");
                DataTable dt = ds.Tables["products"];

                foreach (DataRow row in dt.Rows)
                {
                    foreach (DataColumn col in dt.Columns)
                        Console.WriteLine(row[col]);
                    Console.WriteLine("".PadLeft(20, '='));
                }

            }
            catch (SqlException e)
            {
                Console.WriteLine("Error :" + e.ToString());
            }
            finally
            {
                conn.Close();
            }
            Console.ReadKey();
        }
    }
}

示例说明:
定义查询并打开连接后,就创建和初始化数据适配器:
SqlDataAdapter da =new SqlDataAdapter(sql,conn);
接着创建数据集:
DataSet ds =new DataSet();
此时,得到的只是空数据集。关键的代码是使用数据适配器的Fill方法来执行查询,检索数据,以及填充数据集:
da.Fill(ds,"products");
Fill方法在内部使用数据读取器来访问表模式和数据,然后使用它们填充数据集。如果未在Fill方法中给表提供名称,表将自动命名为TableN,其中N以空字符串开始(第一个表的名称是Table),每次在DataSet中插入新表时都对其加1,因而,建议显式给数据表命名。
如果在已包含数据的数据库上多次执行相同的查询,Fill()方法就会更新数据,并跳过根据模式重新定义表的过程。
注意,下面的代码生成相同的结果。这里不是把SQL和连接传送给数据适配器的构造函数,而是用一个命令设置它的SelectCommand属性,该命令是用相应的SQL和连接创建的。
//Create data adapter
SqlDataAdapter da =new SqlDataAdapter();
da.SelectCommand=new SqlCommand(sql,conn);

有了已填充数据的数据集后,就可以访问DataTable对象中的数据,这个数据集当前只含有一个表:

DataTable dt=ds.Tables["products"];

最后,使用嵌套的foreach循环,访问每一行的列,并且把它们的数据值输出到屏幕上:

foreach (DataRow row in dt.Rows)
                {
                    foreach (DataColumn col in dt.Columns)
                        Console.WriteLine(row[col]);
                    Console.WriteLine("".PadLeft(20, '='));
                }

posted on 2012-07-19 17:53  流星落  阅读(912)  评论(0编辑  收藏  举报

导航