将新行添加到dataset.tables [i]并更新数据库

时间:2013-03-07 08:41:47

标签: c# sql-server winforms

我有两个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添加(导入)行!

请帮助我使用此代码或让我知道一种新方法来执行此操作!

提前感谢。

1 个答案:

答案 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"]);
}