Як я можу використовувати 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();
}