在单个数据集中加载数据库的所有表

时间:2012-06-21 15:04:32

标签: c# ado.net dataset

我正在学习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).

提前致谢。

2 个答案:

答案 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");