繁体   English   中英

使用C#从数据集更新Sql表

[英]Update Sql Table from a Dataset using C#

我正在尝试同步两个SQL数据库表。 例如,将本地数据库同步到Azure数据库。 到目前为止,我的方法是将本地数据库中的数据放入数据集中。 从Azure数据库中删除所有条目,然后将数据集插入Azure。

我已成功设法将本地数据库数据放入数据集中并删除了Azure数据。 但是我不能再将数据集插入到我的Azure表中。 做这个的最好方式是什么? 理想情况下,我不希望通过在应用程序中显式命名列来插入数据,因为我想将来对其进行证明,以防将来添加列。

到目前为止,我有:

    private static bool UploadDataSet(DataSet ds)
    {
        try
        {
            using (SqlDataAdapter updateData = new SqlDataAdapter("",AzureSqlConnection))
            {
                updateData.Update(ds, ds.Tables[0].TableName);
                Log.LogWriter(string.Format("Updating data in table {0}", ds.Tables[0].TableName), "Success");
                return true;
            }
        }
        catch (Exception ex)
        {
            Log.LogWriter(string.Format("Failed to update table {0}. Error {1}", ds.Tables[0].TableName, ex), "Failed");
            throw;
        }
    }

但这实际上并没有将任何行上载到我的Azure数据库中。 我猜是因为我的数据集中的行的RowState保持不变。

PS。 我知道Azure上已经有一个同步代理,但这仍然处于预览阶段,不适合生产环境

好的,所以我最终使用此链接到达了那里:

本体-插入-进入- SQL

    private static bool UploadDataSet(DataSet ds)
    {
        try
        {
            SqlBulkCopy bulkCopy = new SqlBulkCopy(AzureSqlConnection, SqlBulkCopyOptions.TableLock | SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.UseInternalTransaction, null);
            bulkCopy.DestinationTableName = ds.Tables[0].TableName;
            bulkCopy.WriteToServer(ds.Tables[0]);
            Log.LogWriter(string.Format("Updating data in table {0}", ds.Tables[0].TableName), "Success");
            return true;
        }
        catch (Exception ex)
        {
            Log.LogWriter(string.Format("Failed to update table {0}. Error {1}", ds.Tables[0].TableName, ex), "Failed");
            throw;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM