SqlDataReader是连接相关的,SqlDataReader中的查询结果并不是放在程序中的,而是放在数据库服务器中,SqlDataReade只是相当于放了一个指针(游标),只能读取当前游标指向的行,一旦连接断开就不能在读取。这样的好处是无论查询结果有多少条,对程序占用的内存几乎都没有影响。
SqlDataReader对于小数据量的数据来说带来的只有麻烦,ADO.net中提供了数据集的机制,将查询结果填充到本地内存中,这样连接断开,服务器断开都不影响数据的读取。DataSet数据集的好处是降低数据库服务器的压力,编程也简单!
DataSet相当于这样:1.SqlDataReader reader= cmd.ExecuteReader();
2. List<string> list= new List<string>() ;
3.while (reader.Read())
{
list.add(reader.GetString(0))
}
DataSet dataset=new DataSet();
SqlDataAdapter adapter=new SqlDataAdapter(cmd);
adapter.Fill(dataset);
DataSet包含若干表DataTable,Data Table包含若干行DataRow。
foreach(DataRow row in dataset.Tables[0].Rows) row["Name"]。
添加一个按钮btnDataSet,并为其添加Click事件代码如下:
private void btnDataSet_Click(object sender, RoutedEventArgs e) { using (SqlConnection conn = new SqlConnection("Data Source=.; Initial Catalog=T_Test; User ID=sa ;Password=123456")) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from T_Student where Age>@aaa"; cmd.Parameters.Add(new SqlParameter("@aaa", 20)); //SqlDataAdapter是可以帮我们把SqlCommand查询结果填充到DataSet的 类 SqlDataAdapter adapter = new SqlDataAdapter(cmd); //DataSet相当于本地一个复杂集合List<> DataSet dataset = new DataSet(); adapter.Fill(dataset);//把SqlCommand查询结果填充到DataSet中 DataTable table = dataset.Tables[0]; DataRowCollection rows=table.Rows; for (int i = 0; i < rows.Count; i++) { DataRow row = rows[i]; int age = (int)row["Age"]; string name = (string)row["Name"]; MessageBox.Show(name+","+age); } } } }
总结步骤:1.创建一个连接数据库的对象。
SqlConnection conn = new SqlConnection("Data Source=.; Initial Catalog=T_Test; User ID=sa ;Password=123456";
2.打开数据库连接对象。conn.Open();
3.创建SQL命令行对象。SqlCommand cmd = conn.CreateCommand();
4.创建要执行的命令行字符串。(使用参数传值@XXX)cmd.CommandText = "select * from T_Student where Age>@aaa";
cmd.Parameters.Add(new SqlParameter("@aaa", 20));
5.创建一个SqlDataAdapter类的对象,此类是可以帮我们把SqlCommand查询结果填充到DataSet的类
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
6.创建一个DataSets对象并把SqlCommand查询结果填充到DataSet中。 DataSet dataset = new DataSet(); adapter.Fill(dataset);
7.从dataset中获取表,表都存放在DataTable中。DataTable table = dataset.Tables[0];
8.获得表中的行的集合。 DataRowCollection rows=table.Rows;
9.遍历行中的每一行,以及行中的字段。
for (int i = 0; i < rows.Count; i++)
{
DataRow row = rows[i];
int age = (int)row["Age"];
string name = (string)row["Name"];
MessageBox.Show(name+","+age);
}
运行完毕