018. ADO.NET _DataSet_DataAdapter
DataSet对象是支持ADO.NET的断开式或分布式数据方案的核心对象; DataAdapter对象是一种用来充当DataSet对象与实际数据源之间的桥梁 的对象, 所以二者结合访问数据库中数据模式可称为离线数据访问模式.
DataSet是Ado.net最核心成员之一, 它支持ADO.NET断开式, 分布式数据方案的核心对象, 也是实现基于非连接的数据查询的核心组件. 对于DataSet对象可以将其看做是在内存中创建的一个小型关系数据库
ADO.NET对数据库的访问:
SqlDataAdapter类的两大作用:
作用一:可以使用SqlDataAdapter类从数据库中获取数据,并将其填充在数据集中。
作用二:可以使用SqlDataAdapter类将数据集中的更改(在数据集中添加记录、修改记录和删除记录),提交给后台真实数据库,使数据集(虚拟数据库)与后台真实数据库保持同步更新。
SqlDataAdapter类位于System.Data.SqlClient命名空间下。
SqlDataAdapter对象的常用属性
属 性 |
说 明 |
SelectCommand属性 |
指定一个Command对象,用来执行查询操作,从数据库中获取数据。 |
InsertCommand属性 |
指定一个Command对象,用来执行添加操作,在数据库中添加数据。 |
UpdateCommand属性 |
指定一个Command对象,用来执行修改操作,在数据库中修改数据。 |
DeleteCommand属性 |
指定一个Command对象,用来执行删除操作,在数据库中删除数据。 |
SqlDataAdapter对象的常用方法
方 法 |
说 明 |
Fill方法 |
将从数据库中获取到的数据填充到数据集中。 |
Int Fill(DataSet dataset,String str) |
填充指定的DataSet中指定的表 |
Update方法 |
将数据集中的更改(包括:已添加的记录、已修改的记录、已删除的记录),提交给数据库,使数据集与数据库保持同步更新。 |
Update(DataSet) |
根据指定的数据集中的数据表更新数据源 |
Update(DataTable) |
根据指定的数据表更新数据源 |
Update(dataRows): |
根据指定的数据行数组更新数据源 |
示例:
protected void Page_Load(object sender, EventArgs e) { //创建连接字符串 string strCon = @"server=.;database=TYW;uid=sa;pwd=123.456;"; //创建数据库连接对象 SqlConnection con = new SqlConnection(strCon); //创建SqlDataAdapter对象 SqlDataAdapter dap = new SqlDataAdapter("select * from card", con); //创建DataSet对象 DataSet ds = new DataSet(); //填充数据集 int counter = dap.Fill(ds, "card"); Response.Write("获得:" + counter.ToString() + "条数据!" + "<br/>"); Response.Write("<table border='1'><tr><td>外卡号</td><td>内卡号</td><td>姓名</td></tr>"); foreach (DataRow mydr in ds.Tables["card"].Rows) { Response.Write("<tr><td>" + mydr["cardNo"].ToString() + "</td><td>" + mydr["cardBound"].ToString() + "</td><td>" + mydr["name"].ToString() + "</td></tr>"); } Response.Write("</table>"); //执行一些修改, 将name为null或者空的重新赋值 for (int i = 0; i < ds.Tables["card"].Rows.Count; i++) { if ( String.IsNullOrEmpty(ds.Tables["card"].Rows[i]["name"].ToString())) { ds.Tables["card"].Rows[i]["name"] = "55555"; } } //使用SqlCommandBuilder对象,并和SqlDataAdapter关联,自动创建UpdateCommand; 在使用SqlCommandBuilder对象时, 数据库中的表必须定义主键 SqlCommandBuilder builder = new SqlCommandBuilder(dap); dap.Update(ds, "card"); //应用SqlDataAdapter和的Update方法更新数据 Response.Write("*****************************************************************************"); ShowDsTable(ds.Tables[0]);//调用自定义方法ShowDsTable显示更新后的数据 dap.Dispose(); ds.Dispose(); } public void ShowDsTable(DataTable dataTable) { Response.Write("<table border='1'><tr><td>外卡号</td><td>内卡号</td><td>姓名</td></tr>"); foreach (DataRow mydr in dataTable.Rows) { Response.Write("<tr><td>" + mydr["cardNo"].ToString() + "</td><td>" + mydr["cardBound"].ToString() + "</td><td>" + mydr["name"].ToString() + "</td></tr>"); } Response.Write("</table>"); }