我会努力尽可能清楚。基本信息是: 我在同一台服务器上有四个DB,每个DB都有一个DB版本表。 我可以通过连接其中一个DB来读取这些内容 只有一个ConnectionString并从一个大块获得结果 SQL查询。它们显示在我的WindowsFormsApp的datagridview中。 代码如下:
private void FillDataWithGrid()
{
string ConString = ConfigurationManager.ConnectionStrings["conStrA"].ConnectionString;
//string ConStringFG = ConfigurationManager.ConnectionStrings["conStrB"].ConnectionString;
string CmdString = string.Empty;
string CmdStrBLM = string.Empty;
string CmdStrFg = string.Empty;
DataTable dtBlm = null;
using (SqlConnection connBLM = new SqlConnection(CmdStrBLM))
{
CmdStrBLM =
"SELECT dbname, Version, UpdateTime FROM(SELECT TOP 1 'DB.A' as dbname, Version, UpdateTime " +
"FROM [DB.A].[dbo].[DatabaseVersion] ORDER BY UpdateTime DESC)as tbl1 " +
"UNION ALL " +
"SELECT dbname, Version, UpdateTime " +
"FROM(SELECT TOP 1 'DB.B' as dbname, Version, UpdateTime " +
"FROM [DB.B].[dbo].[DatabaseVersion] " +
"ORDER BY UpdateTime DESC)as tbl2 " +
"UNION ALL " +
"SELECT dbname, Version, UpdateTime FROM(" +
"SELECT TOP 1 'DB.C' as dbname, Version, UpdateTime " +
"FROM [DB.C].[dbo].[DatabaseVersion] " +
"ORDER BY UpdateTime DESC)as tbl3 " +
"UNION ALL " +
"SELECT dbname, Version, UpdateTime FROM(" +
"SELECT TOP 1 'DB.D' as dbname, Version, UpdateTime " +
"FROM [DB.D].[dbo].[DatabaseVersion] " +
"ORDER BY UpdateTime DESC)as tbl4";
SqlCommand cmd = new SqlCommand(CmdString, con);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
sda.Fill(dt);
dataGridView1.DataSource = dt.DefaultView;
现在,我想要实现的是分别连接到每个数据库 它自己的连接字符串。
这会涉及多个连接吗?如果是这样,那么如何通过四种不同的连接处理这些?
希望你看到我的观点。任何提示或技巧将不胜感激。谢谢!
答案 0 :(得分:2)
当然,您可以通过返回不同的数据表来完成,但我没有看到通过与同一个数据库的四个不同连接来处理此需求的原因。最好将DB上的合并信息作为当前方法处理。从不同的连接获取所有数据并合并返回的数据表将非常昂贵。
答案 1 :(得分:0)
不知何故,我设法让它发挥作用。将发布此信息以供将来参考。 我从here得到了这个想法。
解决方案涉及以DataTable格式获取传递连接字符串和sqlCommand的数据。重复此操作四次以从每个连接返回DT。接下来创建将保存所有DT的DataSet。创建另一个DT以使用循环合并来自DataSet的结果:
DataSet ds = new DataSet();
ds.Tables.Add(GetData(GetConnectionString(conStringBlm), CmdStrBlm));
//... do this for each connection string
DataTable dtAll = ds.Tables[0].Copy();
for (var i = 1; i < ds.Tables.Count; i++)
{
dtAll.Merge(ds.Tables[i]);
}
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = dtAll;