你必须知道的ADO.NET(九) 深入理解DataAdapter(下)
摘要
由于各种原因,很久没有更新博客了!期间,几分迷茫,几分失落。令人欣慰的是,园子里还有很多热心的读者,都期待我更新博客。想到自己的文章,能对园友有所帮助,我又重拾久违的文笔,娓娓道来,朴实而不做作。在上一篇文章《你必须知道的ADO.NET(八) 深入理解DataAdapter(上)》中,我主要介绍了DataAdapter的工作原理以及基本功能。在本文中,我将通过实例的方式讲解如何使用DataAdapter对象。
目录
1. 如何构造一个DataAdapter对象?
在讲如何用DataAdapter获取数据之前,先讨论一个问题:如何构造一个DataApdater对象?我们知道DataAdapter是一个类,那么如何创建一个类的对象呢(再次强调,本系列教程讲的比较基础,主要针对初学者)?呵呵,当然是用构造函数啦!因此,我们有必要了解一下DataAdapter的构造函数。通过前面的知识,我们已经很清晰的知道,对于不同的数据源,ADO.NET提供了不同的Data Provider。以SQL Server数据库为例,它拥有的DataAdapter为SqlDataAdapter类,它包括以下构造函数:
public SqlDataAdapter(); public SqlDataAdapter(SqlCommand selectCommand); public SqlDataAdapter(string selectCommandText, SqlConnection selectConnection); public SqlDataAdapter(string selectCommandText, string selectConnectionString);
对于构造函数的理解,我们主要看他包含哪些参数。从上面我们可以知道,SqlDataAdapter类包含4个显式的构造函数。因此,我们必须用上述4个构造函数中的一种来实例化SqlDataAdapter类(创建SqlDataAdapter对象)。
提示:如果类中没有声明构造函数,创建对象时,将使用默认构造函数(无参数,无方法体)。如果类中显示声明了构造函数(一个或者多个),那么只能用声明的构造函数来实例化类(系统将不会创建默认构造函数)。
1.1 SqlDataAdapter()
第一个构造函数相对来说比较简单,它不包含参数。我们可以轻松的得到一个SqlDataAdapter对象:
SqlDataAdapter ada = new SqlDataAdapter();
OK,so easy!
1.2 SqlDataAdapter(SqlCommand selectCommand)
第二个构造函数稍微复杂点,它包含了一个SqlCommand类型的参数。我们可以这样创建一个SqlDataAdatpter对象:
SqlCommand cmd = new SqlCommand(); SqlDataAdapter ada = new SqlDataAdapter(cmd);
1.3 SqlDataAdapter(string selectCommandText, SqlConnection selectConnection)
第三个构造函数,它包含了2个参数。第一个参数是字符串类型,它接受一个查询指令。第2个参数是SqlConnection类型,它表示一个连接对象。OK,我们还是写个例子吧!
string selCmdStr = "select * from tb_SelCustomer"; SqlConnection conn = new SqlConnection(); SqlDataAdapter ada = new SqlDataAdapter(selCmdStr, conn);
1.4 SqlDataAdapter(string selectCommandText, string selectConnectionString)
最后一个构造函数,它也包含了2个参数。2个参数均为字符串类型:第一个参数,它接受一个查询指令;第二个参数,它表示一个连接字符串。同样,我们也写个例子。
string selCmdStr = "select * from tb_SelCustomer"; string connStr = @"Data Source=.\SQLEXPRESS; Initial Catalog=db_MyDemo; Integrated Security=SSPI";//构造连接字符串 SqlDataAdapter ada = new SqlDataAdapter(selCmdStr, connStr);
2. 填充数据到DataSet
上面我详细了的介绍了如何构造一个DataAdapter对象。之所以很详细,因为只有构造好一个DataAdapter对象,我们才能发挥出它的功能。其中,它一个非常重要的功能就是填充数据到DataSet。SqlDataAdapter类除了有4个构造函数之外,还包含多个Fill()方法(方法重载)。一般来说,用的比较多的是int Fill(DataTable dt), int Fill(DataSet ds),这2个方法分别接受 DataTable 参数和 DataSet 参数。拥有Fill()方法,我们可以轻松地将外部数据源中的数据填充到DataSet中。废话不多说,还是写个实例来加深理解。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Data; 6 using System.Data.SqlClient; 7 8 namespace DataAdapter2 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 string connStr = @"Data Source=.\SQLEXPRESS; Initial Catalog=db_MyDemo; Integrated Security=SSPI";//连接字符串 15 string selCmdStr = "select * from tb_SelCustomer";//查询指令 16 17 using (SqlConnection conn = new SqlConnection(connStr)) 18 { 19 SqlDataAdapter ada = new SqlDataAdapter(selCmdStr, conn); 20 21 DataSet ds = new DataSet(); 22 ada.Fill(ds); 23 24 if (ds.Tables.Count > 0) 25 { 26 PrintDataTable(ds.Tables[0]); 27 } 28 } 29 30 Console.Read(); 31 } 32 33 /// <summary> 34 /// 打印出DataTable中的内容 35 /// </summary> 36 static void PrintDataTable(DataTable dt) 37 { 38 int col = dt.Columns.Count; 39 40 foreach (DataRow row in dt.Rows) 41 { 42 for (int i = 0; i < col; ++i) 43 { 44 Console.Write("{0}\t", row[i]); 45 } 46 } 47 } 48 } 49 50 }
输出结果:
3. 总结
在本节中,我们主要学习了Adatapter对象的构造函数以及如何填充数据到DataSet。Adatapter构造函数比较多,特点鲜明。在实际开发中,你可以选择一种合适的构造函数来创建DataAdapter对象。就我个人经验来说,第2个和第3个构造函数用的比较多。如果查询指令不带参数,则使用第3个构造函数;如果查询指令带参数,则使用第2个构造函数。