【问题标题】:SELECT @@DBTS using Linq to SQL使用 Linq to SQL 选择 @@DBTS
【发布时间】:2020-02-13 21:26:44
【问题描述】:
如何使用 Linq to SQL 使用 C# 检索 @@DBTS?
这是我正在尝试的:
IEnumerable 结果 = db.ExecuteQuery(@"SELECT @@DBTS");
但是,这会导致“类型 'System.Data.Linq.Binary' 必须声明默认(无参数)构造函数才能在映射期间构造。”
如果我尝试使用 byte[],我会得到同样的错误,但使用的是 byte[] 而不是 System.Data.Linq.Binary。
【问题讨论】:
标签:
c#
asp.net
linq-to-sql
【解决方案1】:
我怀疑您可能必须使用常规 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();
}
【解决方案2】:
我发现了另一种单独使用 Linq to SQL 的方法:
IEnumerable<Int64> results =
db.ExecuteQuery<Int64>(@"SELECT CONVERT(bigint,@@DBTS)");
Int64 latestver = results.First();
【解决方案3】:
使用 EF5+ 和 DbContext 时语法更简单:
public long CurrentRowVersion()
{
return Database.SqlQuery<long>("select convert(bigint, @@DBTS)").First();
}