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

简介:   现在接着上次的来讲SqlDataAdapter的相关应用。   SqlDataAdapter表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。 此类不能被继承。

  现在接着上次的来讲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

目录
相关文章
|
14天前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
2月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
196 3
|
17天前
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
41 7
|
14天前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
14天前
|
存储 缓存 NoSQL
2款使用.NET开发的数据库系统
2款使用.NET开发的数据库系统
|
14天前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
3天前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。
|
13天前
|
人工智能 开发框架 安全
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
|
14天前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
14天前
|
程序员 C# 图形学
全面的C#/.NET自学入门指南
全面的C#/.NET自学入门指南