如何在Gridview上合并/加入两个不同的数据源?

时间:2016-06-24 11:52:11

标签: c# asp.net gridview

我有两个数据库和表。我需要在Gridview的一个数据源上连接两个表。 (我不能使用DBLINK)

try
{
OleDbConnection Connection1;
    using (Connection1 = new OleDbConnection("Provider=MSDAORA.1;Data Source=DATABASE1:1521/orcl;Persist Security Info=True;Password=PASSWORD;User ID=USERNAME;"))
    {
        string sqlQuery = "select * from DB1_TABLE";

        using (OleDbDataAdapter cmd = new OleDbDataAdapter(sqlQuery, Connection1))
        {
                Connection1.Open();
                DataTable dt = new DataTable();
                cmd.Fill(dt);
                GridView1.DataSource = dt;
                GridView1.DataBind();
                Connection1.Close();
        }
    }
}
catch (Exception)
{
}


try
{
OleDbConnection Connection2;
    using (Connection2 = new OleDbConnection("Provider=MSDAORA.1;Data Source=DATABASE2:1521/orcl;Persist Security Info=True;Password=PASSWORD;User ID=USERNAME;"))
    {
        string sqlQuery = "select * from DB2_TABLE";

        using (OleDbDataAdapter cmd = new OleDbDataAdapter(sqlQuery, Connection2))
        {
                Connection2.Open();
                DataTable dt = new DataTable();
                cmd.Fill(dt);
                GridView1.DataSource = dt;
                GridView1.DataBind();
                Connection2.Close();
        }
    }
}
catch (Exception)
{
}

像这样:

enter image description here

有时db1或db2会出错。如果得到其中一个错误,我需要查看其他数据库值:

enter image description here

enter image description here

我该怎么做?你能告诉我一些关于我的示例代码的例子吗?谢谢。

-

我尝试了这样的dataset.merge:

    dt1.Merge(dt2, true, MissingSchemaAction.Add);
    GridView1.DataSource = dt1;
    GridView1.DataBind();

但是得到这样的输出:

enter image description here

我该如何解决?

2 个答案:

答案 0 :(得分:0)

这些方面的东西:

        var data1 = new List<Data1>
        {
            new Data1 { Name = "A", Date1 = DateTime.Now },
            new Data1 { Name = "B", Date1 = DateTime.Now }
        };

        var data2 = new List<Data2>
        {
            new Data2 { Name = "C", Date3 = DateTime.Now },
            new Data2 { Name = "D", Date3 = DateTime.Now },
        };


        var query = from key in data1.Select(item => item.Name)
                        .Union(data2.Select(item => item.Name))

        join datum1 in data1 on key equals datum1.Name into kd1
        from sub1 in kd1.DefaultIfEmpty()

        join datum2 in data2 on key equals datum2.Name into kd2
        from sub2 in kd2.DefaultIfEmpty()

        select new
        {
            Name = key,
            Date1 = sub1?.Date1,
            Date2 = sub1?.Date2,
            Date3 = sub2?.Date3,
            Date4 = sub2?.Date4
        };

我首先创建一个已收到的所有名称的列表,然后将每个数据源连接到该名称列表。

答案 1 :(得分:0)

您可以按照以下方式执行此操作:

  • 检索第一个查询结果,该结果在dataset1

  • 中形成某个DB
  • 检索第一个查询结果,该结果是数据集2中的某个数据库

  • 使用DataSet.Merge方法合并dattsMaster中的两个数据集

  • 将datasetMaster绑定到网格

更新:

最简单的解决方法是在DB1DB2之间有一个链接数据库服务器的SP,然后您可以从DB1 in DB2引用该表。

所以它会有一些代码:

SELECT d.ColA, d.ColB, d.ColC
FROM dbo.MyTable d
UNION ALL
SELECT b.ColA, b.ColB,b.ColC
FROM DB1.dbo.MyOtherTable b

更多信息Linked Servers