2010-07-30 6 views
9

Quello che devo fare è avere una dichiarazione SET IDENTITY_INSERT dbo.myTable ON, qual è la sintassi dell'uso dell'istruzione precedente in un'app C#?Come inserire SET IDENTITY_INSERT dbo.myTable Istruzione ON

+2

A chi segnato questo come "non una vera e propria domanda" - si prega di leggere il [IDENTITY_INSERT SET] (http://msdn.microsoft.com/en-us /library/ms188059.aspx). –

+0

@OMG Ponies - Mi sono chiesto perché qualcuno avesse "non una domanda reale" anche questo: -/ – Rob

risposta

19

E 'proprio la stessa di qualsiasi altro bit di SQL:

using (var connection = new SqlConnection("Connection String here")) 
{ 
    connection.Open(); 
    var query = "SET IDENTITY_INSERT dbo.MyTable ON; INSERT INTO dbo.MyTable (IdentityColumn) VALUES (@identityColumnValue); SET IDENTITY_INSERT dbo.MyTable OFF;"; 
    using (var command = new SqlCommand(query, connection) 
    { 
     command.Parameters.AddWithValue("@identityColumnValue", 3); 
     command.ExecuteNonQuery(); 
    } 
} 
+0

manca la parentesi chiusa alla fine della riga "using" –

3

Beh, se è parte di un'istanza SqlCommand, basta aggiungere al testo:

using(SqlConnection myConnection = new SqlConnection(connString)) 
{ 
    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandText = "SET IDENTITY_INSERT dbo.MyTable ON"; 
    cmd.CommandText += //set the rest of your command here. 
} 

metto in discussione il necessità di questo, comunque. Se stai inserendo un'identità in una tabella con frequenza sufficiente per l'utilizzo del codice, ti consiglio di eseguire una procedura memorizzata per l'inserimento. Farebbe quindi chiami sostanzialmente allo stesso modo:

using(SqlConnection myConnectino = new SqlConnection(connString)) 
{ 
    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandText = "usp_insert_record_into_my_table [ParamList]"; 
    cmd.CommandType = SqlCommandType.StoredProcedure; 
} 
+3

Aaaaaargh, stored procedure con "usp_" prefissato, i miei occhi, il mio occhi, burrrrrrns! ;) – Rob

+0

@Rob - sì, lo so, vecchia convenzione. In realtà mi piace perché è più facile da trovare all'interno dello studio di gestione (per me). Non serve a nessun altro scopo. Se vuoi davvero, immagino di poterlo cambiare. Solo per te. : P – AllenG

+2

Meh - fino a quando non è "sp_", vedi: http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/don-t-start-your-procedures-with-sp_ –