• ADO.NET结合C#常见的数据库操作(二)


      现在接着上次的来讲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 方法会确定已对其执行的更改的类型(InsertUpdate 或 Delete)。 根据更改类型,执行 InsertUpdate 或 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类

    View Code
    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

  • 相关阅读:
    tomcat监控
    rsync排除文件同步
    [转载]centos7 快速安装 mariadb(mysql)
    linux下的头文件和库文件搜索路径 (转)
    用apt-get install一个软件的时候出现错误: 无法解析或打开软件包的列表或是状态文件
    模拟一个简单的基于tcp的远程关机程序(转)
    TCP连接的建立以及利用tcpdump分析连接建立的过程(转)
    UNIX网络编程(转载)
    开源代码网站(转)
    学了5天Arm,今天谈谈初学感受 (转)
  • 原文地址:https://www.cnblogs.com/huangbx/p/2657898.html
Copyright © 2020-2023  润新知