2009-02-09 109 views
2

如何使用Linq to SQL来使用C#检索@@ DBTS?SELECT @@ DBTS使用Linq to SQL

这里就是我想:

的IEnumerable < System.Data.Linq.Binary>结果= db.ExecuteQuery < System.Data.Linq.Binary>(@ “SELECT @@ DBTS”);

但是,这会导致“类型'System.Data.Linq.Binary'必须声明一个默认(无参数)构造函数才能在映射期间构造。”

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

回答

3

我怀疑你可能需要使用常规的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(); 
}