具有不同连接字符串的多个连接

Multiple connections with different connection strings

我会尽量说清楚。基本信息是: 我在同一台服务器上有四个数据库,每个数据库都有一个数据库版本table。 我可以通过连接到这些数据库之一来阅读这些内容 只有一个 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;

现在,我想要实现的是分别连接到每个数据库 它自己的连接字符串。

这会涉及多个连接吗?如果是这样,那么如何用四个不同的连接来处理这些?

希望你明白我的意思。任何提示或技巧将不胜感激。谢谢!

当然,您可以通过返回不同的数据表来做到这一点,但我看不出有什么理由用四个不同的连接来处理同一个数据库的这种需求。将 DB 上的合并信息作为当前方法处理总是更好。从不同的连接获取所有数据并合并返回的数据表将非常昂贵。

我设法让它工作了。将post此以供将来参考。 我从 here 那里得到了灵感。

解决方案涉及通过连接字符串和 sqlCommand 获取 DataTable 格式的数据。从每个连接向 return DT 重复此四次。接下来创建将保存所有 DT 的数据集。使用循环创建另一个 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;