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数据集的代码为:
<span style="font-size:18px;">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对象 </span> <span style="font-size:18px;"> 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());//输出错误信息 </span> <span style="font-size:18px;"> } finally { conText.Close();//关闭连接 } Console.ReadLine(); } } } </span>
在运行结果的时候一定要保证你的数据库连接是正常的,否则会出现非正确的结果。
运行结果为:
更新数据源
DataAdapter对象的Update方法可用来将DataSet中的更改解析回数据源。Update方法将DataSet映像源表中的DataTable对象或DataTable名称用做参数。DataSet实例包含已作出的更改的DataSet,DataTable标识从中检索更改的表。
当调用Update方法时,DataAdapter将分析已作出的更改并执行相应的命令(INSERT,UPDATE或DELETE)。当DataAdapter遇到对DataRow更改时,将使用InsertCommand,UpdateCommand或DeleteCommand来处理该更改。
例二,使用DataAdapter对象更新数据源的代码为:
<span style="font-size:18px;">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 </span> <span style="font-size:18px;">{ 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(); } } }</span>
第一次运行的结果出错
这是因为代码中对象实例引用设置错误,由于并没有名称叫做uerTable的数据表,因此更新并没有进行,将代码中的出现uerTable的地方均改为manager数据表即可。
再次运行的结果为:
CustomerManagement数据库中的manager数据表更新后的表显示为:
使用数据适配器: DataAdapter对象有一点是我们必须要注意的:DataSet对象是从数据源中检索到数据在内存中的缓冲,过多使用DataSet对象将会非常占用资源,所以在编写程序时能使用DataReader对象代替,尽量使用DataReader对象。