2009-02-09 4 views
2

Как использовать Linq to SQL для получения @@ DBTS с помощью C#?SELECT @@ DBTS с использованием Linq to SQL

Вот что я пытаюсь:

< IEnumerable System.Data.Linq.Binary> Результаты = db.ExecuteQuery < System.Data.Linq.Binary> (@ "SELECT @@ DBTS");

Однако это приводит к тому, что «Тип. System.Data.Linq.Binary» должен объявить конструктор по умолчанию (без параметров) для построения во время отображения ».

Если я пытаюсь использовать 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 для 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(); 
} 
Смежные вопросы