Вставка строки и получение идентификатора новой строки в SQL Server CE

Я пытаюсь вставить строку и вернуть идентичность новой строки с чем-то вроде этого:

INSERT INTO blah....;
SELECT @@IDENTITY as NewID;

Я пытаюсь выполнить Оба оператора с одним вызовом объекта DbCommand в C#... не похоже, что это сработает, или у меня что-то не так.

Я читал, что Compact Edition не поддерживает выполнение нескольких операторов в пакете... но я также нашел это:

Если вы хотите запустить несколько запросов одновременно, вы должны включите новый символ строки для каждого оператора и точку с запятой в конце каждого оператора.

источник:http://technet.microsoft.com/en-us/library/bb896140 (SQL.110).aspx

Так это работает или нет... и если да, то что я упускаю?

(Я понимаю, что могу выполнить две команды, и это отлично работает, но мне интересно, не пропущу ли я что-то).

3 ответов


Это похоже на ошибку doc, это наоборот. На вызов ExecuteNonQuery можно выполнить только один оператор.


вы должны определить выходной параметр, чтобы получить значение идентификатора

sqlCommand Command = Conn.CreateCommand();
Command.CommandText = "insert into MyTable(Value1,Value2) values(MyValue,MyValue)"
Command.ExecuteNonQuery();
Command.CommandText = "select @ID = @@IDENTITY"
SqlParameter ID = new SqlParameter("@ID", SqlDbType.Int);
ID.Direction = ParameterDirection.Output;
Command.Parameters.Add(ID);
Command.ExecuteNonQuery();
int NewID = (int)ID.Value;

после большого количества ошибок с sql-server-ce например, направление не может быть выведено, я заставил это работать.

public static long GetIdentity(this IDbConnection connection)
{
    var cmd = connection.CreateCommand();
    cmd.CommandText = "SELECT @@IDENTITY";
    cmd.CommandType = CommandType.Text;
    var id = cmd.ExecuteScalar();
    return (long)(decimal)id;
}