我正在学习ADO.Net [C#],并希望用DataGridView.DataSource = DataSet.tables []命令填充不同的DataGridViews。 但我只知道如何填充1个表到1个数据适配器,是否可以查询整个数据库并将所有表放在单个数据集中,这样我就可以使用dataset.tables [table index]选项填充直到datagridview?
示例:
OleDbConnection con = new OleDbConnection();
con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;data source =.accdb";
ds = new DataSet();
da = new OleDbDataAdapter("SELECT * ", con);
da.Fill(ds);
dgv.DataSource = ds.Tables[0]; (i want to have all the tables as an index so that i can put this as the datasource of the datagridview).
提前致谢。
答案 0 :(得分:4)
我相信你可以告诉DataAdapter返回多个结果集,给它多个SELECT查询,用semilcolon分隔,如下所示:
da = new OleDbDataAdapter("SELECT * FROM Table1; SELECT * FROM Table2", con);
此外,您可以使用多个DataAdapter填充DataSet,如下所示:
daTable1 = new OleDbDataAdapter("SELECT * FROM Table1", con);
daTable2 = new OleDbDataAdapter("SELECT * FROM Table2", con);
daTable1.Fill(ds, "Table1");
daTable2.Fill(ds, "Table2");
然后,您应该能够通过索引器访问DataSet中的表。具体为ds.Tables[int index]和ds.Tables[String name],如下所示:
dgv.DataSource = ds.Tables[0];
或dgv.DataSource = ds.Tables["Table1"];
有关详细信息,请参阅MSDN - Populating a DataSet from a DataAdapter (ADO.NET) (单个多个结果集和从多个DataAdapter填充数据集)。
答案 1 :(得分:0)
或者您可以使用这种简单的方法。 通过这种方式,您可以根据需要添加任意数量的表。
string str = @"SELECT INV_ID,INV_CLIENTNAME,INV_ADD1,INV_CITY,INV_TEL,INV_CIF,INV_DATE,INV_DISCOUNT,
ITEM_DES,ITEM_QTY,ITEM_PRICE,INV_TAX_PERCENT,ITEM_QTY*ITEM_PRICE as gtotal
FROM (tbl_client INNER JOIN tbl_item ON tbl_client.INV_ID = tbl_item.FK_INV_ID)
WHERE (tbl_client.INV_ID = 'abc123')";
OleDbDataAdapter adp = new OleDbDataAdapter(str, cn.db_cn);
DataSet dset = new DataSet();
adp.Fill(dset,"DataTable1");
str = @"SELECT company_name, company_address, company_city, company_tel, company_cif, Id FROM tbl_info";
adp = new OleDbDataAdapter(str, cn.db_cn);
adp.Fill(dset, "tbl_info");