使用Linq to SQL查询SELECT @@DBTS

3

如何使用C#中的Linq to SQL检索@@DBTS?

这是我尝试的方法:

IEnumerable<System.Data.Linq.Binary> results = db.ExecuteQuery<System.Data.Linq.Binary>(@"SELECT @@DBTS");

然而,这会导致错误:"类型'System.Data.Linq.Binary'必须声明一个默认(无参数)构造函数,以便在映射期间构造。"

如果我尝试使用byte[],我会得到相同的错误,但是错误信息会显示byte[]而不是System.Data.Linq.Binary。

3个回答

4
我认为您可能需要使用常规的ADO.NET以及ExecuteReader/ExecuteScalar方法...
using(SqlConnection conn = new SqlConnection(CONN_STRING))
using(SqlCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = "SELECT @@DBTS";
    cmd.CommandType = CommandType.Text;
    conn.Open();
    byte[] ts = (byte[]) cmd.ExecuteScalar();
    foreach (byte b in ts)
    {
        Console.Write(b.ToString("X2"));
    }
    Console.WriteLine();
}

3

我发现使用仅Linq to SQL就可以另一种方法来实现此操作:

        IEnumerable<Int64> results =
            db.ExecuteQuery<Int64>(@"SELECT CONVERT(bigint,@@DBTS)");
        Int64 latestver = results.First();

0

当使用EF5+和DbContext时,语法更加简单:

public long CurrentRowVersion()
{
  return Database.SqlQuery<long>("select convert(bigint, @@DBTS)").First();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接