如何从多个数据库中收集数据并将它们绑定到单个 datagridview 中?

Posted

技术标签:

【中文标题】如何从多个数据库中收集数据并将它们绑定到单个 datagridview 中?【英文标题】:How to collect data from multiple databases and bind them in single datagridview? 【发布时间】:2013-07-21 22:38:34 【问题描述】:

以下代码适用于单个 DataSet,但是当我尝试使用 DataSet 数组时,SqlDataAdapter.Fill() 不起作用。基本上我要做的是连接6个不同的数据库并在它们上运行相同的sql查询并将所有数据收集在一起并在单个dataGridView中显示来自6个db的全部数据。怎么做? 谢谢,

DataSet[] mySet = new DataSet[6];   
DataSet finSet = new DataSet();               

for (int j = 0; j <= 5; j++)

                myConnection.Open();

                for (int i = 0; i <= specRowCount - 2; i++)
                

                    cleanDesc = dataGridView2.Rows[removalPointer].Cells[1].Value.ToString().Replace("'", "''").Trim();
                    classname = dataGridView2.Rows[removalPointer].Cells[0].Value.ToString().Trim();

                    str = "use " + myDatabases[j] + " SELECT top 1 x, y, z, t, h, f, d, " +
                    "s, d, c, s, a, d, f, g, " +
                    "s, f, a, dFROM tttt where c=1 and a=1 and " +
                    "d='" + cleanDesc + "' and d= '" + d+ "'";

                    myAdapter = new SqlDataAdapter(str, myConnection);

                    myAdapter.Fill(mySet[j], "tttt");


                    if (countRows != mySet[j].Tables["tttt"].Rows.Count)
                    

                        mySb.AppendLine(dataGridView2.Rows[removalPointer].Cells[1].Value.ToString());


                        dataGridView2.Rows.Remove(dataGridView2.Rows[removalPointer]);


                    
                    else
                    

                        removalPointer++;

                    



                    countRows = mySet[j].Tables["tttt"].Rows.Count;

                    finSet.Merge(setArray[j]);

                    dataGridView1.DataSource = finSet.Tables["tttt"];


                
                myConnection.Close();

                MessageBox.Show("Con closed!");


            

【问题讨论】:

您对一组数据集说“SqlDataAdapter.Fill 不起作用”:您不期望会发生什么? 【参考方案1】:

仅根据您向我们展示的代码,问题似乎是您从数据适配器填充mySet[j],然后将setArray[j] 合并到finSet。因此来自数据适配器的数据永远不会进入finSet

另一件事:我很确定这段代码:

DataSet[] mySet = new DataSet[6]; 

... 将创建一个 DataSet 数组,但该数组将包含每个元素的空值。那是因为您创建了一个数组,但还没有创建 DataSet 对象来填充它。

所以这段代码会抛出一个错误,因为你试图填充一个 Null:

myAdapter.Fill(mySet[j], "tttt");

试试这样的:

mySet[j] = new DataSet();
myAdapter.Fill(mySet[j], "tttt");

【讨论】:

安,非常感谢您的回答。即使在循环 myAdapter.Fill(mySet[j], "tttt"); 的第一次迭代中,我的代码也没有达到这一点。所以,它没有到达合并点。因为它不做第一次Fill。我用 MessageBoxes 对其进行了测试。它什么也没发生,但我期待它填满我的数组。每个数组保存来自不同数据库的结果。然后将这些数组集合合并到 finSet 并在 datagridview 中显示总结果。 我添加了一些额外的细节;这可能会有所帮助。

以上是关于如何从多个数据库中收集数据并将它们绑定到单个 datagridview 中?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Forms 1 视图绑定到多个对象

将多个类的数据绑定到单个列表视图/xamarin 表单

如何从数据库中检索单个字段数组数据并将它们分开 - 使用 laravel,PHP

如何将多个图像绘制到单个画布上?

WebViewClient将数据返回到Activity onPageFinished

如何在 FAB 按钮单击时将数据从多个片段发送到单个活动