这个需求的关键是:
所要获取的DataRow对象的结构要和真实的数据库结构相同
总体上分为俩个大方法:
1———使用DataSet或者是DataTable自身的Load方法 和 DataAdapter的fill方法来获得
在内存中创建完整的数据库模型,可以使用DataAdapter对象来创建。首先建立一个临时的空数据库,然后使用数据适配器对象中的fill方法进行数据填充,这样就获得了数据库的完整的实际结构。内存中的模型填充也可以使用DataTable和DataSet自带的load方法。Load(DataReader,相关的属性枚举参数)
做完了这些之后就可以通过相应的数据库表和行之间的属性关系来得到DataRow对象了
pDataRow = pDataSet.Tables[0].Rows[0];
2———使用DataReader对象自带的GetValues方法,
这个方法的核心是:将数据库中的一行数据以数组的形式存储在外部声明的一个数组中,然后把数组赋值个DataRow中的ItemArray属性。
但是这个方法的麻烦之处在于:DataRow对象的声明方式是受到保护的,无法直接声明。这个是因为在数据库中,这个对象是最基本的元素,在不知道数据库的整体结构的情况下是无法创建的。因此要是想创建这个对象首先要有DataSet,然后才可以生成这个对象。因此这就又回到了方法1。
只不过这个方法的存储介质变成了数组。
if(SqlDataReader.Read()) { object[] values = new object[SqlDataReader.FieldCount]; Array.Clear(values, 0, SqlDataReader.FieldCount); SqlDataReader.GetValues(values); DataRow.ItemArray = values; }
但是个人觉得在使用数据适配器时,需要编写sql语句用来选择相应的表,并且还要建立数据库连接对象。感觉很麻烦,欢迎了解的朋友指正应该如何做事最好的做法