2009-03-25 4 views
2

получил проблему с колоннами идентичности в Sql Server CESql Server Ce 3.5 Идентичность вставка

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

SET IDENTITY_INSERT TESTTABLE ON; Вставить в значения testTable (id, name) (1, 'Something') SET IDENTITY_INSERT testTable ON;

отправляет сообщение об ошибке «Конструкция или инструкция SQL не поддерживается». , но затем вставляет строку штрафа?!?!?!

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

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

+0

не может быть недостающим ";" между «INSERT» и вторым «SET»? –

ответ

2

TRY

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

ИЛИ

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

GO - это концепция, которая существует только в инструментах - фактический парсер не использует их, чтобы различать что-либо. –

+0

@ Джейсон Короткие, вы ошибаетесь! сделайте следующее: напечатайте 'ERROR !!!' создайте процедуру xyz как Print ', это не будет работать без «GO». добавив GO после печати «ERROR !!!», он будет работать –

+0

@KM: SQLCE не поддерживает хранимые процедуры в любом случае – 2009-11-23 15:53:14

9

Если вы используете 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(); 
      } 
+0

ОК, это сработало отлично. tks много! Я пытался использовать одну команду separatelly, устанавливая insert_identity в моей winform, и это было нормально, но я не смог сделать вставку после. Но, как и пример yr, именно то, что я хотел =). ура –

Смежные вопросы