我有两个sql服务器(其中一个在我的Web服务器中:服务器A,另一个是本地服务器:服务器B)
我使用下面的代码将SQL SERVER A中的表上的数据复制到SQL SERVER B中的另一个表: (不同的服务器和不同的数据库.. 两个表在列中相同)
服务器A的
关闭服务器B
string strsql = "SELECT * FROM **serverA_table**";
ONda = new SqlDataAdapter(strsql, ONcon);
ONds = new DataSet();
ONda.Fill(ONds, "serverA_table");
strsql = "SELECT * FROM serverB_table";
OFFda = new SqlDataAdapter(strsql, OFFcon);
OFFds = new DataSet();
OFFda.Fill(OFFds, "serverB_table");
DataRow[] newRow = ONds.Tables["serverA_table"].Select();
DataTable dtTarget = new DataTable();
dtTarget = OFFds.Tables["serverB_table"].Clone();
foreach (DataRow temp in newRow)
{
dtTarget.ImportRow(temp);
}
SqlCommandBuilder cb = new SqlCommandBuilder(OFFda);
OFFda.InsertCommand = cb.GetInsertCommand();
OFFda.UpdateCommand = cb.GetUpdateCommand();
OFFda.DeleteCommand = cb.GetDeleteCommand();
OFFda.Update(OFFds.Tables["serverB_table"]);
但是没有发生,并且没有向我的serverB_table添加(导入)行!
请帮助我使用此代码或让我知道一种新方法来执行此操作!
提前感谢。
答案 0 :(得分:1)
在导入行之前,您必须使用DataRow.SetAdded
。请尝试以下方法:
string strsql = "SELECT * FROM ServerATable";
using (ONcon = new SqlConnection(conString))
using (ONda = new SqlDataAdapter(strsql, ONcon))
{
ONcon.Open();
ONds = new DataSet();
ONda.Fill(ONds, "serverA_table");
}
strsql = "SELECT * FROM ServerBTable";
using (OFFcon = new SqlConnection(conString))
using (OFFda = new SqlDataAdapter(strsql, OFFcon))
{
OFFcon.Open();
OFFds = new DataSet();
OFFda.Fill(OFFds, "serverB_table");
DataRow[] newRow = ONds.Tables["serverA_table"].Select();
foreach (DataRow temp in newRow)
{
temp.SetAdded();
OFFds.Tables["serverB_table"].ImportRow(temp);
}
SqlCommandBuilder cb = new SqlCommandBuilder(OFFda);
OFFda.InsertCommand = cb.GetInsertCommand();
OFFda.UpdateCommand = cb.GetUpdateCommand();
OFFda.DeleteCommand = cb.GetDeleteCommand();
OFFda.Update(OFFds.Tables["serverB_table"]);
}