日期:2014-05-17  浏览次数:20871 次

C#转移MYSQL数据问题
本帖最后由 haolaile 于 2013-03-06 11:32:24 编辑
吧一个数据库的数据转移到另一个数据库中,数据库表比较多,所以一个一个表转移了个,代码如下,但是
执行后有问题,该做如何修改?

//数据库2的数据插入到数据库1中
//参数1:目标数据库;参数2:源数据库;参数3:表名
private void InsertTableData(string conString1, string conString2, string tabStr)
{
MySqlConnection conn1 = new MySqlConnection();
conn1.ConnectionString = conString1;
conn1.Open();

MySqlConnection conn2 = new MySqlConnection();
conn2.ConnectionString = conString2;
conn2.Open();

MySqlDataAdapter adapter1 = new MySqlDataAdapter("select * from '" + tabStr + "'", conn1);
DataSet dataSet1 = new DataSet();

if (dataSet1 != null)
{
adapter1.Fill(dataSet1, tabStr);
}

MySqlDataAdapter adapter2 = new MySqlDataAdapter("select * from '" + tabStr + "'", conn2);
DataSet dataSet2 = new DataSet();

? ? ? ? MySqlCommand cmd2 = new MySqlCommand("select count(*) from " + tabStr, conn2);
? ? ? ? Object res2 = cmd2.ExecuteScalar();

? ? ? ? if (res2 != null)
? ? ? ? {
? ? ? ? ? ? int nCount = Convert.ToInt32(res2.ToString());
? ? ? ? ? ? //没有数据,不用插入了
? ? ? ? ? ? if (nCount == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? conn1.Close();
? ? ? ? ? ? ? ? conn2.Close();
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? }

if (dataSet2 != null)
{
adapter2.Fill(dataSet2, tabStr);
}

for (int i = 0; i < dataSet2.Tables.Count;i++ )
{
for (int j = 0; j < dataSet2.Tables[i].Rows.Count;i++ )
{
dataSet1.Tables[i].LoadDataRow(dataSet2.Tables[i].Rows[j].ItemArray, false);
}
}

adapter1.Update(dataSet1, tabStr);

conn1.Close();
conn2.Close();
}


这里我只有一个表一个表数据拷贝,想了下又改成:
dataSet1.Tables[0].LoadDataRow(dataSet2.Tables[0].Rows[0].ItemArray, false);
结果adapter1.Update(dataSet1, tabStr);报错,说需要先执行insertcommand
dataset mysql c# 数据库 string

------解决方案--------------------
第二层循环,最后是j++,而不是i++
for(int j=0;j<dataSet2.Tables[i].Rows.Count;j++)
------解决方案--------------------
在Update前加下面三句
MySqlCommandBuilder cb = new MySqlCommandBuilder (adapter1);
adapter1.SelectCommand.CommandText = "SELECT * FROM " + tabStr";
cb.RefreshSchema();
adapter1.Update(dataSet1,tabStr);