通过 DataAdapter 可以将数据库 和 DataSet 联系起来,笔者认为相对于 DataReader,使用DataAdapter 可以支持多条 SQL 语句查询。
DataAdapter 用于从数据源检索数据并填充DataSet表中,DataAdapter 还将对DataSet 的 更改解析回数据源。
DataAdapter 的 Fill 方法使用 DataAdapter 的 SelectCommand 的结果集来填充DataSet。Fill 方法的参数 包括将要 填充的 DataSet 和 DataTable 对象。
使用DataAdapter 的Fill 方法 填充DataSet 中的DataTable后,以断开式操作 DataSet 的数据库表,包括数据的查询、插入、更新和删除等操作。
调用 DataAdapter的 Update 方法,可以将DataSet 中的更改解析回数据源。
在我们实际的项目中,很少使用 DataAdapter 这种方式去更新表。下面就只 写了一个 查询的用法。
如果我们的项目中,该次查询需要两个SQL,也就是说会产生 两个DataTable 时,使用DataAdapter 是特别方便的。
比如: 我们要 分页查询问题列表,然后还要获取 问题的总数,这样我们就需要两个SQL语句,同时也将差生两个结果集合,此时我们使用DataAdapter是特别方便的。
public void Connection() { string connStr = @"Data Source=123.123.123.123;Initial Catalog=test; Persist Security Info=True;User ID=admin;Password=admin"; string sql = @"SELECT TOP 10 * FROM Test WHERE AskCity = @city; SELECT COUNT(askid) FROM Test WHERE AskCity = @city"; using (SqlConnection conn = new SqlConnection(connStr)) { //建立连接 conn.Open(); //创建SQL命令 SqlCommand queryCmd = new SqlCommand(sql, conn); //添加参数 Listlist = new List (); list.Add(new SqlParameter() { ParameterName = "city", SqlDbType = SqlDbType.VarChar, Value = "全国" }); queryCmd.Parameters.AddRange(list.ToArray()); //创建Adapter SqlDataAdapter adapter = new SqlDataAdapter(queryCmd); //创建DataSet DataSet ds = new DataSet(); //填充数据集 adapter.Fill(ds); DataTable asklist = ds.Tables[0]; DataTable allCount = ds.Tables[1]; //遍历数据集 if (asklist.Rows.Count > 0) { Console.WriteLine("AskID \t\t标题"); foreach (DataRow item in asklist.Rows) { Console.WriteLine("{0} \t\t{1}",Convert.ToInt32(item["AskId"]),item["Title"].ToString().Substring(0,10)); } } conn.Close(); } }