【问题标题】:how to byte[] to timestamp如何将字节 [] 转换为时间戳
【发布时间】:2018-06-04 22:41:19
【问题描述】:

我的数据库中有一个时间戳列,用作行版本。在从数据库中提取数据时,我们也得到了 rowversion,我将其转换为 byte[]。到此阶段为止,一切都按预期进行。

在更新数据时,我想(在存储过程中)检查 rowversion 是否相同,即将从代码传递的版本与存储在数据库中的版本进行比较。如果不同,我会中止更新,否则会更新数据。

现在我的问题是,如何将 byte[] 传递给存储过程。存储过程中的参数类型是timestamp。

注意:我使用企业库在 c# 中进行所有数据库操作。我无法更改存储过程或数据类型。受到限制。

【问题讨论】:

  • 你的字节时间戳格式是什么?或者,时间戳是如何成为 byte[] 的?也许是this
  • 不推荐使用时间戳语法。此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。 docs.microsoft.com/en-us/sql/t-sql/data-types/…
  • @john 我得到数据行,我从中将 row_version 转换为字节数组,如下所示: dr["row_version"] == DBNull.Value ?新字节[1] : (byte[])dr["row_version"];

标签: c# sql arrays timestamp enterprise-library


【解决方案1】:

见下面的代码:

           DateTime now = DateTime.Now;
            long bNow = now.ToBinary();
            byte[] arrayNow = BitConverter.GetBytes(bNow);

            long getLong = BitConverter.ToInt64(arrayNow, 0);

            DateTime getNow = DateTime.FromBinary(getLong);

            Console.WriteLine(getNow.ToLongTimeString());
            Console.ReadLine();

【讨论】:

  • 我认为你的问题弄错了。如果真的很抱歉。我只是想知道当我调用存储过程时数据类型应该是什么?哪个企业库参数类型映射到 sql server 时间戳?
  • 如果是数据库中的时间戳需要使用DateTime类型。
  • 不,我们不能。请参阅以下适合我的解决方案。
【解决方案2】:

以下代码按预期工作

public static TestMethod(....,byte[] rowVersion)
{
    .........
    dbConnection_.AddInParameter(dbcommand, "@row_version", DbType.Binary,rowVersion);
    ...........
}

以上代码使用的是企业库。我认为这会对某人有所帮助。

感谢所有在这里尝试提供帮助的人。干杯..!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多