由于VS2003安装程序太多,此处无法上传,所以大家有communitysever的可以从里面获得然后反编译为自己所用,没有的就到网络上搜下吧,有许多资源呢!下面进行详细说明介绍。
首先ADO.NET中使用了DataAdapter 来处理和数据库联机和脱机当时开发人员设计了DataAdapter是为了能够处理脱机数据方便操作有关这点只要其Fill思路方法即可,这时会在DataSet中创建个新名为“Table“DataTable.
要重新指定名可用DataAdapter.Fill(DataSet,“Tabelname“)此时connection也关闭了DataAdapter既可以用来提交查询并将结果存储到DataSet中也可以用来向数据库传递更改仅仅使用其Update思路方法即可达到向数据库提交存储地DatSet中更改#t#
DataAdapter将查询结果存储在DataSet或DataTable对象中当执行这过程时候DataAdapter使用了个Command来和数据库通讯并在内部使用了DataReader来获取查询结果***才将结果复制到DataSet新行中去这也是Fill过程如果有两个DataAdapter对象都使用相同Connection对象在创建时候就会创建两个Connection对象而不是同个这种情况解决方案是:
- SqlConnection con= SqlConnection(\"server=localhost;database=Northwind;Trusted_Connection=Yes;\")
- SqlDataAdapter da= SqlDataAdapter(\"select CategoryID,Description from Categories\",con);
- SqlDataAdapter da= SqlDataAdapter(\"select CategoryID,Description from Customers\",con);
而不是将查询串单独写成行有时候可能并不希望ADO.NET中架构和数据库中架构相同这种情况解决方案的是可以采用别名思路方法即select id as Product ID,amount as Product Amount from product;另外种解决方案就是使用DataAdapter提供TableMappings集合机制通过它就可以将查询结果映射到DataSet结构中这种思路方法更方便更灵活TableMappings属性返回个DataTableMappingsCollection对象。
其中包含了组DataTableMappings只要DataSet中相应表名称和数据库中表名相同即可以使用它来创建个映射(DataSet中可以有多个表)TableMappings里还有个ColumnMappings属性其使用方法和TableMappings相似其原理是DataAdapter从数据库读取数据后利用ADO.NET从结果集中获取列名称有点特别要注意即只能获取列名称ADO.NET而无法获取表名称DataAdapter事先假定表名称为Table,接着遇到映射语句则进行表映射不说了看代码:
- con= SqlConnection(\"server=localhost;database=Northwind;Trusted_Connection=Yes;\");
- da= SqlDataAdapter(\"select top 50 CustomerID,CompanyName from Customerswhere CustomerID>\'BOTTM\'\",con);
- ds= DataSet;
- da.Fill(ds,\"Categories\");
- this.DataGrid1.DataSource=ds.Tables[\"Categories\"];this.DataGrid1.DataBind;
- con.Close;