/ / SELECT @@ DBTS, використовуючи Linq для SQL - c #, asp.net, linq-to-sql

SELECT @@ DBTS за допомогою Linq для SQL - c #, asp.net, linq-to-sql

Як я можу використовувати Linq до SQL для отримання @@ DBTS за допомогою C #?

Ось що я намагаюся:

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

Однак це призводить до "типу" System.Data.Linq.Binary "повинен оголосити конструктор за замовчуванням (без параметрів), щоб бути побудованим під час картографування."

Якщо я спробую використати байт [], я отримаю ту ж помилку, але з байтом [] замість System.Data.Linq.Binary.

Відповіді:

3 для відповіді № 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();
}

3 для відповіді № 2

Я знайшов інший спосіб зробити це, використовуючи лише Linq для SQL:

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

0 для відповіді № 3

І ще простіший синтаксис при використанні EF5 + та DbContext:

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