现在接着上次的来讲SqlDataAdapter的相关应用。
SqlDataAdapter表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。 此类不能被继承。
一、常见构造函数
◆ SqlDataAdapter() 初始化 SqlDataAdapter 类的新实例。
◆ SqlDataAdapter(SqlCommand) 初始化 SqlDataAdapter 类的新实例,用指定的 SqlCommand 作为 SelectCommand 的属性。
◆ SqlDataAdapter(String, SqlConnection) 使用 SelectCommand 和 SqlConnection 对象初始化 SqlDataAdapter 类的一个新实例。
二、常用属性
◆ DeleteCommand 获取或设置一个 Transact-SQL 语句或存储过程,以从数据集删除记录。
◆ InsertCommand 获取或设置一个 Transact-SQL 语句或存储过程,以在数据源中插入新记录。
◆ SelectCommand 获取或设置一个 Transact-SQL 语句或存储过程,用于在数据源中选择记录。
◆ UpdateCommand 获取或设置一个 Transact-SQL 语句或存储过程,用于更新数据源中的记录。
三、常用方法
◆ Dispose() 释放由 Component 使用的所有资源。 (继承自 Component。)
◆ Fill(DataSet) 在 DataSet 中添加或刷新行。 (继承自 DbDataAdapter。)
◆ Fill(DataSet, String) 在 DataSet 中添加或刷新行以匹配使用 DataSet 和 DataTable 名称的数据源中的行。 (继承自DbDataAdapter。)
◆ Fill(DataTable) 在 DataSet 的指定范围中添加或刷新行,以与使用 DataTable 名称的数据源中的行匹配。 (继承自DbDataAdapter。)
◆ FillSchema(DataSet, SchemaType) 将名为“Table”的 DataTable 添加到指定的 DataSet 中,并根据指定的 SchemaType 配置架构以匹配数据源中的架构。 (继承自 DbDataAdapter。)
◆ FillSchema(DataTable, SchemaType)根据指定的 SchemaType 配置指定 DataTable 的架构。 (继承自 DbDataAdapter。)
◆ Update(DataRow[]) 为指定的 DataRow 对象数组中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。 (继承自 DbDataAdapter。)
◆ Update(DataSet) 为指定 DataSet 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。 (继承自 DbDataAdapter。)
◆ Update(DataTable) 为指定 DataTable 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。 (继承自 DbDataAdapter。)
◆ Update(DataSet, String) 为具有指定 DataTable 名称的 DataSet 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。 (继承自 DbDataAdapter。)
四、备注(直接摘自MSDN)
SqlDataAdapter 是 DataSet 和 SQL Server 之间的桥接器,用于检索和保存数据。 SqlDataAdapter 通过对数据源使用适当的 Transact-SQL 语句映射 Fill(它可更改 DataSet 中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet 中的数据)来提供这一桥接。 更新是逐行进行的。 对于每个已插入、修改和删除的行,Update 方法会确定已对其执行的更改的类型(Insert、Update 或 Delete)。 根据更改类型,执行 Insert、Update 或 Delete 命令模板将已修改的行传播给数据源。 当 SqlDataAdapter 填充 DataSet 时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。 但是,除非MissingSchemaAction 属性设置为 AddWithKey,否则这个隐式创建的架构中不包括主键信息。 也可以使用 FillSchema,让 SqlDataAdapter 创建 DataSet 的架构,并在用数据填充它之前就将主键信息包括进去。 有关更多信息,请参见 向数据集添加现有约束 (ADO.NET)。
SqlDataAdapter 与 SqlConnection 和 SqlCommand 一起使用,以便在连接到 SQL Server 数据库时提高性能。
五、示例
1、通过SqlDadaAdapter和DataTable添加数据
string name = NameTextBox.Text.Trim(); string strConn = ConfigurationManager.ConnectionStrings["ConnectionStr"].ToString(); SqlConnection conn = new SqlConnection(strConn); try { conn.Open(); string inserStr = "select * from Fortyfour_Teacher order by TeacherId"; SqlDataAdapter sda = new SqlDataAdapter(inserStr, conn);//创建适配器实例对象 DataTable teacherTa = new DataTable();//新建数据表实例对象 sda.FillSchema(teacherTa,SchemaType.Source);//用于自动填入主键 sda.Fill(teacherTa);//填充数据表 SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(sda);//这句很重要,自动生成sql命令 DataRow drInsert = teacherTa.NewRow();//新建一行 drInsert["TeacherName"] = name; teacherTa.Rows.Add(drInsert);//将新行插入数据表 sda.Update(teacherTa);//更新数据表 Tip_Label.Text = name + "添加成功"; ResultGridView.DataSource = teacherTa; ResultGridView.DataBind(); } catch (Exception ex) { throw ex; } finally { conn.Close(); conn.Dispose(); }
2、使用SqlDataAdapter和DataTable查询数据
string strConn = ConfigurationManager.ConnectionStrings["ConnectionStr"].ToString(); SqlConnection conn = new SqlConnection(strConn); try { conn.Open(); string queryStr = "select * from Fortyfour_Student"; SqlDataAdapter sda = new SqlDataAdapter(queryStr, conn); DataTable dt = new DataTable(); sda.Fill(dt); ResultGridView.DataSource = dt; ResultGridView.DataBind(); } catch (Exception ex) { throw ex; } finally { conn.Dispose(); }
3、使用SqlDataAdapter和DataSet进行查询信息
string firstName = FirstNameTextBox.Text.Trim(); string strConn = ConfigurationManager.ConnectionStrings["ConnectionStr"].ToString(); SqlConnection conn = new SqlConnection(strConn); try { conn.Open(); string queryStr = "select * from Fortyfour_Teacher where TeacherName like '" + firstName + "%'"; SqlDataAdapter sda = new SqlDataAdapter(queryStr,conn); DataSet ds = new DataSet(); sda.Fill(ds,"teacher"); ResultGridView.DataSource = ds.Tables["teacher"].DefaultView; ResultGridView.DataBind(); } catch (Exception ex) { throw ex; } finally { conn.Dispose(); }
在这里,要特别强调一下SqlDataReader+List<T>做数据源效率更高
string firstName = FirstNameTextBox.Text.Trim(); string strConn = ConfigurationManager.ConnectionStrings["ConnectionStr"].ToString(); SqlConnection conn = new SqlConnection(strConn); ////////////////////////////////////////////////////////////////////////////////////// //SqlDataReader+IList<T>做数据源效率高 ////////////////////////////////////////////////////////////////////////////////////// List<Teacher> teacher = new List<Teacher>(); try { conn.Open(); string queryStr = "select * from Fortyfour_Teacher where TeacherName like '"+firstName+"%'"; using (SqlCommand cmd = new SqlCommand(queryStr, conn)) { SqlDataReader sda = cmd.ExecuteReader(CommandBehavior.CloseConnection); while (sda.Read()) { Teacher p = new Teacher(sda[0].ToString(), sda[1].ToString()); teacher.Add(p); } } ResultGridView.DataSource = teacher; ResultGridView.DataBind(); } catch (Exception ex) { throw ex; } finally { conn.Dispose(); }
涉及到的Teacher类
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace train.SQL_NET { public class Teacher { public Teacher() { // // TODO: 在此处添加构造函数逻辑 // } public Teacher(string _teacherID, string _teacherName) { teacherID = _teacherID; teacherName = _teacherName; } private string teacherID; private string teacherName; public string TeacherID { get { return this.teacherID; } set { this.teacherID = value; } } public string TeacherName { get { return this.teacherName; } set { this.teacherName = value; } } } }
总结:SqlDataAdapter是我们在使用VS开发,用服务器控件类似于GridView的时候,经常会用到的操作数据库的一个类,一种方法,可以用来填充DataSet/DataTable。
【注】下篇文章将简单讲解procedure
理论内容来自MSDN