我正在尝试同步两个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上已经有一个同步代理,但这仍然是预览,不适合生产环境
答案 0 :(得分:2)
好的,所以我最后使用这个链接到达那里:
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;
}
}