以下代码适用于单个DataSet但是当我尝试使用DataSet数组时,SqlDataAdapter.Fill()不起作用。基本上我要做的是连接6个不同的数据库并对它们运行相同的sql查询并收集所有数据并在单个dataGridView中显示6个dbs的整个数据。怎么做? 谢谢,
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!");
}
答案 0 :(得分:0)
根据您向我们展示的代码,看起来问题是您从数据适配器填充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");