Вставка строки и получение идентификатора новой строки в SQL Server CE - PullRequest
8 голосов
/ 06 апреля 2011

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

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

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

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

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

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

Так это работает или нет ... и если да, то чего мне не хватает?

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

Ответы [ 3 ]

8 голосов
/ 06 апреля 2011

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

3 голосов
/ 06 апреля 2011

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

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;
0 голосов
/ 10 октября 2016

После многих ошибок с 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;
}
...