使用rowversion将SQL Server 2008数据库与专有的noSQL数据库同步

时间:2013-03-11 22:28:10

标签: .net sql-server-2008 data-synchronization

我正在尝试将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列的十六进制值不同。

0 个答案:

没有答案