Вставка строки и получение идентификатора новой строки в 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;
}