我正在尝试将SQL Server 2008数据库与专有的第三方数据库同步。在SQL Server数据库中,我在要同步的表中有一个类型为timestamp / rowversion的SyncId列。但第三方数据库不支持rowversion或timestamp列。它只支持一些基本类型,如字符串,数字,日期(仅存储日期,没有时间组件),布尔值,小数。
当我第一次同步时,我可以将SyncId存储为第三方数据库中的字符串。稍后,我将需要检索此第三方数据库中可用的最高同步ID。如何实现自定义比较逻辑/排序逻辑,以便获得最高的同步ID。
此外,在将查询或存储过程参数发送到SQL Server时,如何将SyncId字符串值转换回本机Sql Server数据类型?
实现同步系统以将增量数据更改从Sql Server 2008下载到第三方数据库的任何其他想法?
修改 从SQL Server数据库检索SyncId并转换为字符串时,我得到一个例外。代码是:
string sqlSyncId = "";
SqlCommand selectNewAnchorCommand = new SqlCommand();
string newAnchorVariable = "@sync_new_received_anchor";
selectNewAnchorCommand.CommandText =
"SELECT " + newAnchorVariable + " = min_active_rowversion() - 1";
selectNewAnchorCommand.Parameters.Add(newAnchorVariable, SqlDbType.Timestamp);
selectNewAnchorCommand.Parameters[newAnchorVariable].Direction = ParameterDirection.Output;
selectNewAnchorCommand.Connection = conn;
reader = cmd.ExecuteReader();
if (reader.Read())
{
do
{
sqlSyncId = reader["@sync_new_received_anchor"].ToString();
} while (reader.Read());
}
Stack Trace: System.IndexOutOfRangeException: @sync_new_received_anchor
at System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName)
at System.Data.SqlClient.SqlDataReader.GetOrdinal(String name)
at System.Data.SqlClient.SqlDataReader.get_Item(String name)
修改 我也尝试过:
sqlSyncId = reader["@sync_new_received_anchor"].ToString(); //same error
sqlSyncId = reader[0].ToString(); //Works
为什么我无法按名称引用列?
我收到的值是101,但在数据库表中,SyncId列的十六进制值不同。