C#之数据适配器:DataAdapter对象

       在ADO.NET中,能够用于执行命令操作的不但有有Command对象,还有DataAdapter对象,DataAdapter对象执行查询的返回数据将存储在DataSet对象中。

       DataAdapter对象概述

       DataAdapter对象是DataSet和数据之间的桥梁,可以建立并初始化数据表对数据源执行SQL指令,与DataSet对象结合,提供DataSet对象存储数据,可视为DataSet对象的操作核心。

       在使用DataAdapter对象时,只需要设置表示SQL命令和数据库连接的两个参数,就可以通过Fill方法把查询结果放置在一个DataSet对象中。DataAdapter对象可用于执行数据库的命令操作,含有四个不同的操作命令:

       (1)SelectCommand:用来选取数据源中的记录;

       (1)InsertCommand:用来向数据源中新插入一条记录;

       (1)UpdateCommand:用来更新数据源中的数据;

       (1)DeleteCommand:用来删除数据源中的记录。

       填充DataSet数据集

       在填写DataSet数据集时,需要用到DataAdapter对象的Fill方法来完成,格式如下:

       DataAdapter对象.Fill(DataSet对象,映像源表的名称的字符串);

       例一,利用DataAdapter对象的Fill方法填充DataSet数据集的代码为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;//引入命名空间
using System.Data;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string conStr = "server=.;user=sa;pwd=123456;database=CustomerManagement";//连接字符串
            SqlConnection conText = new SqlConnection(conStr);//创建Connection对象

            try
            {
                conText.Open();//打开数据库
                string sql = "select * from manager";//创建统计语句
                SqlDataAdapter da = new SqlDataAdapter(sql, conText);//创建DataAdapter对象
                DataSet ds = new DataSet();//创建DataSet对象
                da.Fill(ds, "table");//填充DataSet
                Console.WriteLine("填充成功!");
            }
            catch (Exception ex)//创建检查Exception对象
            {
                Console.WriteLine(ex.Message.ToString());//输出错误信息
            }
            finally
            {
                conText.Close();//关闭连接
            }
            Console.ReadLine();
        }
    }
}

        在运行结果的时候一定要保证你的数据库连接是正常的,否则会出现非正确的结果。

        运行结果为:

C#之数据适配器:DataAdapter对象_第1张图片

 

        更新数据源

        DataAdapter对象的Update方法可用来将DataSet中的更改解析回数据源。Update方法将DataSet映像源表中的DataTable对象或DataTable名称用做参数。DataSet实例包含已作出的更改的DataSet,DataTable标识从中检索更改的表。

        当调用Update方法时,DataAdapter将分析已作出的更改并执行相应的命令(INSERT,UPDATE或DELETE)。当DataAdapter遇到对DataRow更改时,将使用InsertCommand,UpdateCommand或DeleteCommand来处理该更改。

       例二,使用DataAdapter对象更新数据源的代码为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;//引入命名空间
using System.Data;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string conStr = "server=.;user=sa;pwd=123456;database=CustomerManagement";//连接字符串
            SqlConnection conText = new SqlConnection(conStr);//创建Connection对象

            try
            {
                conText.Open();//打开数据库
                string sql = "select * from manager";//创建统计语句
                SqlDataAdapter da = new SqlDataAdapter(sql, conText);//创建DataAdapter对象
                da.UpdateCommand = new SqlCommand("update manager set userPwd='123456'",conText);
                DataSet ds = new DataSet();//创建DataSet对象
                da.Fill(ds,"manager");//填充DataSet
                DataRow dr = ds.Tables["manager"].Rows[0];
                dr["userPwd"] = "userPwd";
                da.Update(ds,"manager");//更新数据集
                Console.WriteLine("更新成功!");
            }
            catch (Exception ex)//创建检查Exception对象
            {
                Console.WriteLine(ex.Message.ToString());//输出错误信息
            }
            finally
            {
                conText.Close();//关闭连接
            }
            Console.ReadLine();
        }
    }
}

       第一次运行的结果出错

C#之数据适配器:DataAdapter对象_第2张图片

 

       这是因为代码中对象实例引用设置错误,由于并没有名称叫做uerTable的数据表,因此更新并没有进行,将代码中的出现uerTable的地方均改为manager数据表即可。

       再次运行的结果为:

C#之数据适配器:DataAdapter对象_第3张图片

 

       CustomerManagement数据库中的manager数据表更新后的表显示为:

C#之数据适配器:DataAdapter对象_第4张图片

 

C#之数据适配器:DataAdapter对象_第5张图片

 

       使用数据适配器: DataAdapter对象有一点是我们必须要注意的:DataSet对象是从数据源中检索到数据在内存中的缓冲,过多使用DataSet对象将会非常占用资源,所以在编写程序时能使用DataReader对象代替,尽量使用DataReader对象。


 

 

 

 

你可能感兴趣的:(ADO.NET(C#))