(六)数据适配器对象——以编程方式访问数据库

1、 配置数据适配器

初始配置有两个要求:

1)         可以获取数据的Select语句,或SqlCommand(如果使用Select语句,它将用于在内部生成SqlCommand);

2)         连接字符串,SqlConnection对象(如果使用连接字符串,它将用于在内部生成SqlConnection对象,而如果使用有连接的SqlCommand,将使用该连接)。

例如:

 SqlConnection conn = new SqlConnection(ConifgurationManager

.ConnectionStrings[“MyConnectionString”].ConnectionString);

SqlCommand cmd = new SqlCommand ( “ SELECT * FROM MyTable ” , conn);

SqlDataAdapter adapter = new SqlDataAdapter( cmd );

                   或者:

SqlDataAdapter adapter = new SqlDataAdapter(“ SELECT * FROM MyTable ”

ConifgurationManager.ConnectionStrings[“MyConnectionString”].ConnectionString);

 

配置后,可以用Fill()FillSchema()方法来填充DataTable中的数据和架构信息——DataTable可以是一个独立的实例,也可以是DataSet中的对象。

为了能够通过SqlDataAdapter修改数据,还要设置3个属性——DeleteCommandInsertCommandUpdateCommand。可手工创建这些命令,也可以使用命令生成器SqlCommandBuilder来创建,SqlCommandBuilder builder = new SqlCommandBuilder(adapter)

 

2、 提取数据库数据

配置数据适配器后,只要调用它的Fill()方法,并传递要填充数据的DataTable引用即可提取:

DataTable dt = new DataTable();

adapter.Fill( dt );

此方法传输数据时,不传输架构信息。解决此问题的方法有二。

一是,使用数据适配器来推断数据库中的架构信息。如果使用SqlCommandBuilder来生成命令,数据适配器已经获得了架构信息,因此可以使用这些架构信息来配置DataTable。为此,可使用FillSchema()方法。例如:

DataTable dataTable = new DataTable ();

adapter.FillSchema ( dataTable , SchemaType.Mapped );

adapter.Fill ( dataTable );

二是,使用Fill ()方法,以已经具有与数据阅读器获得的数据相匹配的架构的DataTable对象为参数。这样不必自己创建架构。

3、 修改数据库数据

将数据加载到DataTable对象中后,可以读取和操这些数据。然而,使用数据适配器将数据的修改提交给数据库后,这些修改才生效。这个操作很简单:adapter.Update ( dataTable);

使用数据适配器的GetChanges()方法可获得要执行的修改,AcceptChanges()则接受修改。

4、 定制数据适配器的行为

大部分定制都可以通过属性完成。

表映射:表映射决定数据库中的数据表如果映射到DataTable对象中的数据列。

要控制表映射,可用SqlDataAdapter.TableMappings属性。每个DataTableMapping对象都有3个需要配置:

1)         SourceTable : 数据库中的表名;

2)         DataSetTable : DataSetDataTable对象集合中标识表的表名;

3)         ColumnMappings : ColumnMapping对象的集合,每个ColumnMapping对象都将数据库中的一列映射到DataTable中的一列。

每个ColumnMapping对象都有两个属性需要配置:

1)         SourceColumn : 数据库中的列名;

2)         DataSetColumn : DataTable 中的列名。

 

要设置表映射,需要在类型为DataTableMappingSqlDataAdapter.ColumnMapping属性中添加一个新元素,例如:

adapter.TableMappings.Add ( “ SourceTableName ” , “ DataSetTableName”); ,然后使用同样的方式来添加列映射:

adapter.TableMappings [ “ SourceTableName ” ].Add (

“ SourceColumn1Name ”, “ DataSetColumn1Name ”);

adapter.TableMappings [ “ SourceTableName ” ].Add (

“ SourceColumn1Name ”, “ DataSetColumn1Name ”);

posted @ 2009-07-04 15:20  烈火★寒冰  阅读(791)  评论(0编辑  收藏  举报