DataSet对象支持ADO.NET断开式、分布式数据方案的核心对象,也是实现基于非连接的数据查询的核心组件。对DataSet对象可以将其看作是在内存中创建的一个小型关系数据库,它将数据库中的数据复制了一份放到用户本地的内存中,供用户在不连接数据库的情况下读取数据,充分利用了客户端资源,大大降低了数据库服务器的压力。
DataAdapter对象是一种用来充当DataSet对象与实际数据源之间桥梁的对象,可以说只要有DataSet的地方就有它,它也是专门为DataSet服务的。
DataAdapter对象的工作步骤一般有两种:一种是通过Command对象执行SQL语句从数据源中检索数据,将获取的结果集填充到DataSet对象的表中;另一种是把用户对DataSet对象做出的更改写入到数据源中。
1.离线模式数据库遍历
2.离线模式更新数据库(插入)
3.离线模式更新数据库(更新)
//离线模式遍历数据库
SqlConnection conn = null;
SqlDataAdapter sda = null;
DataSet ds = null;
string constr = "server = .;database = company;uid = sa;pwd = 1234";
try {
conn = new SqlConnection(constr);
conn.Open();
//创建适配器对象
string sql = "select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp";
sda = new SqlDataAdapter(sql,conn);
//创建数据集对象
ds = new DataSet();
//将适配器查询出的结果填充到数据集中
sda.Fill(ds,"emp");
//遍历数据集对象用来显示数据
foreach(DataRow drin ds.Tables["emp"].Rows){
Console.WriteLine(dr["empno"]+"-"+dr["ename"]+"-"+dr["job"]+"-"+dr["deptno"]);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally {
if(ds.IsInitialized){
ds.Clear();
ds = null;
}
if(sda != null){
sda.Dispose();
}
if(conn != null && conn.State == ConnectionState.Open){
conn.Close();
}
}
//利用离线模式更新数据库(插入)
string constr = "server = .;database = company;uid = sa;pwd = 1234";
SqlConnection conn = null;
SqlCommand insertCmd = null;
try {
conn = new SqlConnection(constr);
SqlDataAdapter sda = new SqlDataAdapter("select * from emp",conn);
insertCmd = new SqlCommand("insert into emp(empno,ename,deptno)values(@empno,@ename,@deptno)",conn);
SqlParameter[] param = {
new SqlParameter("@empno",SqlDbType.Int),
new SqlParameter("@ename",SqlDbType.VarChar),
new SqlParameter("@deptno",SqlDbType.Int),
};
param[0].Value = 1;
param[1].Value = "Tom";
param[2].Value = 20;
insertCmd.Parameters.Add(param[0]);
insertCmd.Parameters.Add(param[1]);
insertCmd.Parameters.Add(param[2]);
sda.InsertCommand = insertCmd;
DataSet ds = new DataSet();
sda.Fill(ds,"tb_emp");
//需要将数据添加到数据集中
ds.Tables["tb_emp"].Rows.Add(data);
sda.Update(ds, "tb_emp");
}
catch(Exception ex){
Console.WriteLine(ex.Message);
}
finally{
if(insertCmd != null){
insertCmd.Dispose();
}
if(conn != null && conn.State == ConnectionState.Open){
conn.Close();
}
}
//利用离线模式更新数据库(数据更新)
string constr = "server = .;database = company;uid = sa;pwd = 1234";
SqlConnection conn = null;
SqlCommand updateCmd = null;
try {
conn = new SqlConnection(constr);
SqlDataAdapter sda = new SqlDataAdapter("select * from emp",conn);
updateCmd = new SqlCommand("update emp set ename = @ename where empno = @empno", conn);
SqlParameter[] param = {
new SqlParameter("@ename",SqlDbType.VarChar),
new SqlParameter("@empno",SqlDbType.Int),
};
param[0].Value = "Roose";
param[1].Value = 1;
updateCmd.Parameters.Add(param[0]);
updateCmd.Parameters.Add(param[1]);
sda.UpdateCommand = updateCmd;
DataSet ds = new DataSet();
sda.Fill(ds,"tb_emp");
//需要将数据添加到数据中
foreach(DataRow dr in ds.Tables["tb_emp"].Rows){
if(Convert.ToInt32(dr["empno"]) == 1){
dr["ename"] = "Roose";
}
}
sda.Update(ds,"tb_emp");
Console.WriteLine("数据修改成功!");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine("数据修改失败");
}
finally {
if(updateCmd != null){
updateCmd.Dispose();
}
if(conn != null && conn.State == ConnectionState.Open){
conn.Close();
}
}