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

时间:2014-07-21 14:54:33

标签: c# sql sql-server azure

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

我已成功设法将本地数据库数据导入DataSet并删除Azure数据。但我不能然后将DataSet插入我的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没有变化。

聚苯乙烯。我知道Azure上已经有一个同步代理,但这仍然是预览,不适合生产环境

1 个答案:

答案 0 :(得分:2)

好的,所以我最后使用这个链接到达那里:

bulk-insert-into-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;
        }
    }