2010-04-21 9 views
6

Ho questa piccola domanda che ho in mente da un po 'di tempo.Sql Server CE - Incremento temporaneo dell'aumento automatico su una colonna specifica

qui va:

E 'possibile disabilitare temporaneamente l'AUTO_INCREMENT sul ID di colonna.

In modo da poter aggiungere una nuova riga alla tabella e poter specificare il valore dell'ID quando si inserisce la riga.

E quindi alla fine abilitare nuovamente l'Auto_Increment e lasciare che funzioni normalmente?

E se è possibile come posso farlo?

La struttura della tabella è molto semplice

Nome colonna (attributi)

ID (Primary Key, Auto Increment, int, not null) 
Name (nvarchar(100), not null) 

Nota:

  • Il nome della tabella è: People.
  • Consideriamo anche che la tabella abbia già dati e non possa essere modificata.
  • Il server database è SQL Server CE.
  • I comandi SQL verranno eseguiti in un programma C#, se di qualche aiuto.

Spero davvero che sia possibile, sarebbe molto utile.

Grazie

EDIT

SqlActions SqlActions = new SqlActions(); 

SqlCeCommand SqlCmd = new SqlCeCommand("SET IDENTITY_INSERT People ON", SqlActions.Connection()); 

try 
{ 
    SqlCmd.ExecuteNonQuery(); 
} 
catch (SqlCeException Error) 
{ 
    Console.WriteLine(Error.ToString()); 
} 

string query = "INSERT INTO People SET (ID, Nome) VALUES (@ID, @Nome)"; 

SqlCeCommand SqlInsert = new SqlCeCommand(query, SqlActions.Connection()); 

SqlInsert.Parameters.AddWithValue("@ID", 15); 
SqlInsert.Parameters.AddWithValue("@Nome", "Maria"); 

try 
{ 
    SqlInsert.ExecuteNonQuery(); 
} 
catch (SqlCeException Error) 
{ 
    Console.WriteLine(Error.ToString()); 
} 

La stringa di connessione funziona, ho provato.

Egli riferisce:

Si è verificato un errore di analisi della query. [numero di riga token = 1, linea provvisoria compensato = 20, Token per errore = SET]

SOLUZIONEgrazie alla OrbMan

 SqlActions SqlActions = new SqlActions(); 

     SqlCeCommand SqlCmd = new SqlCeCommand("SET IDENTITY_INSERT People ON", SqlActions.Connection()); 
     try 
     { 
      SqlCmd.ExecuteNonQuery(); 

      string query = "INSERT INTO People (ID, Nome) VALUES (@ID, @Nome)"; 
      SqlCmd.CommandText = query; 
      SqlCmd.Parameters.AddWithValue("@ID", 15); 
      SqlCmd.Parameters.AddWithValue("@Nome", "Vania"); 
      SqlCmd.ExecuteNonQuery(); 
     } 
     catch (SqlCeException Error) 
     { 
      Console.WriteLine(Error.ToString()); 
     } 
+0

già risposto [qui] (http://stackoverflow.com/questions/682654/sql-server-ce-3-5 -identity-insert) ... –

+0

L'avevo già provato, senza successo. –

risposta

8

io credo che si possa utilizzare SET IDENTITY_INSERT. Non sono sicuro che funzioni in tutte le versioni.

Aggiornamento 2:

Prova questa versione:

SqlActions SqlActions = new SqlActions(); 
SqlCeCommand SqlCmd = new SqlCeCommand("SET IDENTITY_INSERT People ON", SqlActions.Connection()); 
try 
{ 
    SqlCmd.ExecuteNonQuery(); 
    string query = "INSERT INTO People (ID, Nome) VALUES (@ID, @Nome)"; 
    SqlCmd.CommandText = query; 
    SqlCmd.Parameters.AddWithValue("@ID", 15); 
    SqlCmd.Parameters.AddWithValue("@Nome", "Maria"); 
    SqlCmd.ExecuteNonQuery(); 
} 
catch (SqlCeException Error) 
{ 
    Console.WriteLine(Error.ToString()); 
} 
+0

Ho provato "SET IDENTITY_INSERT People ON" e poi ho provato a inserire alcune righe che specificano l'ID e il programma si blocca. E VB è solo in grado di dire questo: "La colonna non può essere modificata. [Nome colonna = id]" –

+0

Lo stesso accade se provo ad aggiungere una riga e specificare l'ID e non eseguo "SET IDENTITY_INSERT". Per quello che vedo, penso che "SET IDENTITY_INSERT" non ha alcun effetto. –

+1

Lo stai eseguendo come una dichiarazione batch separata da punto e virgola? – RedFilter

Problemi correlati