2009-03-25 12 views
2

bekam ein Problem mit Identitätsspalten in SQL Server CESQL Server CE 3.5 Identität Einsatz

wenn Server-Explorer verwenden, in VS2008, das folgende Skript

SET IDENTITY_INSERT ON testtable ausgeführt wird; In testTable-Werte (ID, Name) einfügen (1, 'Something') SET IDENTITY_INSERT testTable ON;

sendet den folgenden Nachricht Fehler 'Das Set SQL-Konstrukt oder Anweisung wird nicht unterstützt.' aber fügt dann die Zeile in Ordnung?!?!?!

wie auch immer, wenn ich versuche, die gleiche Sache durch C# zu tun, das Skript als Textbefehl geben es nicht sagen, der Fehler in der war „Einfügen Schlüsselwort“

Ich verstehe, dass gegen SQL Server CE die Befehl akzeptiert nur einen Stapelbefehl zum Zeitpunkt , also in diesem Fall haben wir drei Befehle (es würde mit dem vollen SQLServer arbeiten) irgendeine Idee?

+0

könnte es das fehlende sein ";" zwischen "INSERT" und zweiten "SET"? –

Antwort

2

TRY

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

ODER

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

GO ist ein Konzept, das nur in den Tools existiert - der eigentliche Parser verwendet sie nicht, um irgendetwas zu unterscheiden. –

+0

@Jason Kurz, du liegst falsch! mach folgendes: druck 'FEHLER !!!' create procedure xyz as Print 'das geht ohne "GO" nicht. durch Hinzufügen von GO nach dem Druck 'ERROR !!!', wird es funktionieren –

+0

@KM: SQLCE unterstützt sowieso keine gespeicherten Prozeduren –

9

Wenn Sie 3.5 verwenden sind SqlCe dann sollte diese Arbeit. Sie müssen es jedoch als zwei separate Befehle senden. Sie können Befehle nicht mit ";" oder "GO" in SqlCe. Eher müssen Sie etwas tun:

  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

ok, das hat gut funktioniert. Danke vielmals! Ich habe versucht, einen Befehl separat zu verwenden, setze insert_identity in meiner Winform ein und das war in Ordnung, aber ich konnte die Einfügung danach nicht machen. Aber wie das Beispiel macht genau das, was ich wollte =). Prost –

Verwandte Themen