创建Adapter
通过 DataAdapter 可以将数据库 和 DataSet 联系起来,笔者认为相对于 DataReader,使用DataAdapter 可以支持多条 SQL 语句查询。
DataAdapter 用于从数据源检索数据并填充DataSet表中,DataAdapter 还将对DataSet 的 更改解析回数据源。
DataAdapter 填充DataSet 或 DataTable
DataAdapter 的 Fill 方法使用 DataAdapter 的 SelectCommand 的结果集来填充DataSet。Fill 方法的参数 包括将要 填充的 DataSet 和 DataTable 对象。
操作 和处理 DataSet
使用DataAdapter 的Fill 方法 填充DataSet 中的DataTable后,以断开式操作 DataSet 的数据库表,包括数据的查询、插入、更新和删除等操作。
使用DataAdapter 更新数据源
调用 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);
//添加参数
List<SqlParameter> list = new List<SqlParameter>();
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();
}
}