Sql Server Ce 3.5 Идентификационная вставка - PullRequest
2 голосов
/ 25 марта 2009

возникла проблема со столбцами идентификаторов в Sql Server CE

при использовании обозревателя серверов в VS2008, выполняя следующий скрипт

SET IDENTITY_INSERT testTable ON; Вставьте в testTable (id, name) значения (1, «Нечто») SET IDENTITY_INSERT testTable ON;

отправляет следующее сообщение об ошибке 'Конструкция или оператор Set SQL не поддерживается.' но потом вставляет строку нормально?!?!?!

в любом случае, когда я пытаюсь сделать то же самое через C #, выдавая этот скрипт в виде текста команды не удается сказать, что ошибка была в «Вставить ключевое слово»

Я понимаю, что для SQL SERVER CE команда принимает только одну пакетную команду за раз так что в этом случае у нас есть три команды (это будет работать с полным SQLServer) есть идеи?

Ответы [ 2 ]

9 голосов
/ 25 марта 2009

Если вы используете SqlCe 3.5, это должно работать. Тем не менее, вам нужно отправить его в виде двух отдельных команд. Вы не можете разделять команды с помощью ";" или "GO" в SqlCe. Скорее, вам нужно сделать что-то вроде этого:

            SqlCeConnection connection = new SqlCeConnection(connectionString);
            SqlCeCommand identChangeCommand = connection.CreateCommand();
            identChange.CommandText = "SET IDENTITY_INSERT SomeTable ON";
            SqlCeCommand cmd = connection.CreateCommand();
            cmd.CommandText = "INSERT INTO testTable (Id, column1, column2..) VALUES (10,val1,val2...)";
            try
            {
                connection.Open();
                identChange.ExecuteNonQuery();
                cmd.ExecuteNonQuery();
            }

            catch (SqlCeException ex)
            {
                //log ex
            }
            finally
            {
                connection.Close();
            }
2 голосов
/ 25 марта 2009

TRY

SET IDENTITY_INSERT testTable ON; 
Insert into testTable (id,name) values (1,'Something');
SET IDENTITY_INSERT testTable OFF;

OR

SET IDENTITY_INSERT testTable ON
go
Insert into testTable (id,name) values (1,'Something')
go
SET IDENTITY_INSERT testTable OFF
go
...