表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
:表示数据库Demodbo
:表示架构(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 条件)