---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
SqlDataReader是连接相关的, SqlDataReader中的查询结果并不是放到程序中的,而是放在数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),只能读取当前游标指向的行,一旦连接断开就不能再读取。这样做的好处就是无论查询结果有多少条,对程序占用的内存都几乎没有影响。
SqlDataReader对于小数据量的数据来说带来的只有麻烦,优点可以忽略不计。ADO.Net中提供了DataSet(数据集)的机制,将查询结果填充到本地内存中,这样连接断开、服务器断开都不影响数据的读取。
DataSet dataset = new DataSet(); SqlDataAdapter adapter = newSqlDataAdapter(cmd); adapter.Fill(dataset);
SqlDataAdapter是DataSet和数据库之间沟通的桥梁。数据集DataSet包含若干表DataTable,DataTable包含若干行DataRow。foreach(DataRow row in dataset.Tables[0].Rows) 。
在没有封装一个方法之前:
string ConnStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString;
02. using (SqlConnection conn = new SqlConnection(ConnStr))
03. {
04. conn.Open();
05. using (SqlCommand cmd = conn.CreateCommand())
06. {
07. cmd.CommandText = "Select * from Person";
08. DataSet dataset = new DataSet(); //相当于一个容器
09. SqlDataAdapter adapter = new SqlDataAdapter(cmd); // 执行SQl语句的cmd语句(将查询的cmd作为参数传递给adapter(SqlDataAdapter是DataSet和数据库之间沟通的桥梁))
10. adapter.Fill(dataset); // 将执行的结果填充到DataSet
11. /*
12. DataTable table = dataset.Tables[0];
13. for (int i = 0; i < table.Rows.Count; i++)
14. {
15. DataRow row = table.Rows[i];
16. string name = Convert.ToString(row["Name"]);
17. MessageBox.Show(name);
18. }*/
19. foreach(DataRow row in dataset.Tables[0].Rows)
20. {
21. string name = Convert.ToString(row["Name"]);
22. MessageBox.Show(name);
23. }
24. }
25.
26. }
添加一个SQLHelper.cs类,开始封装方法:
01.Class SQLHelper
02.{
03. public static DataTable ExcuteDataTable(string sql, params SqlParameter[] parameters)
04. {
05.
06. string ConnStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString;
07. using (SqlConnection conn = new SqlConnection(ConnStr))
08. {
09. conn.Open();
10. using (SqlCommand cmd = conn.CreateCommand())
11. {
12. cmd.CommandText = sql;//清除旧数据
13. foreach (SqlParameter parameter in parameters)
14. {
15. cmd.Parameters.Add(parameter);
16. }
17. DataSet dataset = new DataSet();
18. SqlDataAdapter adapter = new SqlDataAdapter(cmd);
19. adapter.Fill(dataset);
20. return dataset.Tables[0];
21.
22. }
23. }
24. }
25.}
调用ExcuteDataTable():
01.DataTable dt = SQLHelper.ExcuteDataTable("select * from Person ");
02. for (int i = 0; i < dt.Rows.Count; i++)
03. {
04. DataRow row = dt.Rows[i];
05. string name = Convert.ToString(row["Name"]);
06. MessageBox.Show(name);
07. }
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 详细请查看:http://net.itheima.com