我的另外一篇通过DataTable.Load(DataReader r)是最方便的。这里记录一下用过的方法,相比来说没Load方法好用。
一、通过GetSchemaTable()。从SQL里面查询到结果以后,怎么知道有几个字段及字段的类型呢?用DataReader的GetSchemaTable()方法来获得查询结果表的结构。这样来建一张表。可查MSDN来看一下GetSchemaTable()方法的功能,及用处。它可得到DataReader的各字段类型,名称等等。MSDN里面的那个
例子运行一下就很清楚它是干什么的了。它会获得数据库表中各字段的名称和数据类型,等。然后放入一张表中。
下面来写方法吧:
string source = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=E:\\MyProgram\\CsAccess\\ConnectAccess\\data.mdb";
using (OleDbConnection conn = new OleDbConnection(source))
{
conn.Open();
/*用DataReader来填充DataTable*/
OleDbCommand cmd = new OleDbCommand(select, conn);
OleDbDataReader reader = cmd.ExecuteReader(); /*创建DataReader*/
DataTable TSelectReSoult = new DataTable(); /*存放要在Gridview里面显示的最后结果*/
DataTable TSchema = reader.GetSchemaTable(); /*存放查询结果的各字段属性(如 ColumnName字段名称、DataType字段类型、ColumnSize*/
foreach (DataRow ilRow in TSchema.Rows)/*建表*/
{
/*获取这个字段的类型*/
Type TilRowType = Type.GetType(ilRow["DataType"].ToString());
TSelectReSoult.Columns.Add(ilRow["ColumnName"].ToString(), TilRowType);
}
for (int il = 0; reader.Read() &&il<100; il++)/*将查询的结果前100条数据插入到SelectResoultT中*/
{
DataRow r = TSelectReSoult.NewRow();
for (int jl = 0; jl < TSelectReSoult.Columns.Count; jl++)
{
r[jl] = reader[jl];
}
TSelectReSoult.Rows.Add(r);
}
reader.Close(); /*关闭reader*/
dataGridView1.DataSource = TSelectReSoult;
conn.Close();
代码是从程序中截取出来的,如果有些小地方不完整。欢迎指出,一定修改。
阅读(8717) | 评论(0) | 转发(0) |