【问题标题】:Multiple connections with different connection strings具有不同连接字符串的多个连接
【发布时间】:2015-04-21 16:10:01
【问题描述】:

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

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

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

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

【问题讨论】:

  • 运行自己的代码时会发生什么..?其次,你为什么不在 sql management studio 中测试代码,看看你是否得到了你期望的结果.. 如果你这样做了.. 那么我建议将所有这些 sql 代码放入一个存储过程中,然后执行代码从而填充它datatable..还有`DataTable dtBlm = null;`如果你不使用它,为什么要声明它..?
  • 什么是反对票?
  • 代码运行良好。我只是在为如何多次处理连接而苦苦挣扎。另外,我不能用 SP 做到这一点。

标签: c# datagridview datatable connection-string


【解决方案1】:

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

【讨论】:

  • 不是同一个数据库,而是四个不同的数据库。
  • 没关系,还是同一个服务器。
【解决方案2】:

不知何故,我设法让它工作。将发布此内容以供将来参考。 我从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;

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 2011-08-28
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2015-06-03
    相关资源
    最近更新 更多