ВЫБЕРИТЕ @@ DBTS, используя Linq to SQL - PullRequest
2 голосов
/ 09 февраля 2009

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

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

IEnumerable results = db.ExecuteQuery (@ "SELECT @@ DBTS");

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

Если я пытаюсь использовать byte [], я получаю ту же ошибку, но с byte [] вместо System.Data.Linq.Binary.

Ответы [ 3 ]

3 голосов
/ 09 февраля 2009

Я нашел другой способ сделать это, используя только Linq to SQL:

        IEnumerable<Int64> results =
            db.ExecuteQuery<Int64>(@"SELECT CONVERT(bigint,@@DBTS)");
        Int64 latestver = results.First();
3 голосов
/ 09 февраля 2009

Я подозреваю, что вам, возможно, придется использовать обычные 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();
        }
0 голосов
/ 03 декабря 2013

И еще более простой синтаксис при использовании EF5 + и DbContext:

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