winform 多个查询结果显示到datagridview

表1 查询出ID值,有5行怎样将5行数据读取出去,将5行ID值 作为条件向表2查询(同服务器,不同数据库),得到表2所有结果显示到datagridview,怎样实现呢?

Step 1. 添加引用System.Data.SQLite. 注意需要复制SQLite.Interop.dll至运行目录下;
Step 2. 定义变量

public partial class Form1 : Form
    {
        SQLiteConnection mConn;
        SQLiteDataAdapter mAdapter;
        DataTable mTable;
        public Form1()
        {
            InitializeComponent();
        }
  }

Step 3. 连接数据库,并查找数据库中表显示到cboTables

private void Form1_Load(object sender, EventArgs e)
        {
            //连接数据库.
            string mDbPath = Application.StartupPath + "/northwind.db";
            //如果数据库不存在,则自动创建.
            mConn = new SQLiteConnection("Data Source=" + mDbPath);
 
           //打开数据库文件.
            mConn.Open();
 
            //创建表[Test Table].
            // id        - Unique Counter - Key Field (Required in any table)
            // FirstName - Text
            // Age       - Integer
            using (SQLiteCommand mCmd = new SQLiteCommand
                ("CREATE TABLE IF NOT EXISTS [Test Table] " +
                 "(id INTEGER PRIMARY KEY AUTOINCREMENT, 'FirstName' TEXT, 'Age' INTEGER);",
                 mConn))
            {
                mCmd.ExecuteNonQuery();
            }
           
            
            //获取数据库中表.
            //表 "Tables"中字段 "TABLE_NAME" 包含所有表名信息.
            using (DataTable mTables = mConn.GetSchema("Tables")) // "Tables"包含系统表详细信息;
            {
                for (int i = 0; i < mTables.Rows.Count; i++)
                {
                    cboTables.Items.Add(mTables.Rows[i].ItemArray[mTables.Columns.IndexOf("TABLE_NAME")].ToString());
                }
                if (cboTables.Items.Count > 0)
                {
                    cboTables.SelectedIndex = 0; // 默认选中第一张表.
                }
            }
           
        }

Step 4. 选择cboTables中表名,点击Ok,获取该表详细信息显示到grdDetail中。

private void btnOk_Click(object sender, EventArgs e)
        {
            mAdapter = new SQLiteDataAdapter("SELECT * FROM [" + cboTables.Text + "]", mConn);
            mTable = new DataTable(); // Don't forget initialize!
            mAdapter.Fill(mTable);
 
            // 绑定数据到DataGridView
            grdDetail.DataSource = mTable;
        }

如果是同一服务器的不同数据库,可以使用一条SQL语句查询不同的数据库的数据,格式为:[数据库].[架构].[表名],
示例如下:

SELECT * FROM Demo.dbo.Customer AS C 
WHERE EXISTS (SELECT 1 FROM Demo2.dbo.ShippingAddress AS A WHERE A.Id =1 AND A.Id=C.AddressId)

Demo.dbo.Customer解释:
Demo:表示数据库Demo
dbo:表示架构(Schema)
Customer:表示要查询的表名

当然,如果你要依靠程序来处理也是可以的。也有不同的实现方式:

1.如果同一个账号操作两个数据库,那么可以只使用一个数据库连接,但在对数据名进行操作时,需指定完整的表名,如:[数据库].[架构].[表名]
2.如果不同账号操作两个数据库,这样的话,需要两个不同的数据库连接,分别对不同的数据库进行操作。

不同数据库 是不是可以理解为不同的数据库软件?(比如sqlserver和oracle)
是的话 可以先查出来然后整理好对应字段 然后重新填充到同一个datatable里

如果是同数据库软件不同库名的话可以使用union all做查询合并例如sqlserver下

select 字段1,字段2 form [数据库1].[dbo].表1 where 字段1=id1
UNION ALL
select 字段1,字段2 form [数据库2].[dbo].表2 where 字段2=id2

你的问题是在查询那块,还是在datagrid展示呢?查询的话,如果同一台服务器上的不同数据库,数据库软件应该可以做联合查询的,就可以用一个sql,如果跨数据库就需要代码先查一个表,再连接不同连接,构建sql查询即可。

多表查询
select ID from table1 表1的结果
select * from table where ID in (select ID from table1)

select * from [数据库名].[表名2] where id in
(select id from [数据库名].[表名1] where 条件)