2010-07-30 2 views
9

Что мне нужно сделать, так это иметь оператор SET IDENTITY_INSERT dbo.myTable ON, в чем синтаксис использования вышеуказанного оператора в приложении C#?Как установить инструкцию SET IDENTITY_INSERT dbo.myTable ON

+2

Для кого это отмечено как «не реальный вопрос» - пожалуйста, прочитать [SET IDENTITY_INSERT] (http://msdn.microsoft.com/en-us /library/ms188059.aspx). –

+0

@OMG Ponies - Я действительно задавался вопросом, почему у кого-то был «не настоящий вопрос». Это тоже: -/ – Rob

ответ

19

Это точно так же, как и любой другой бит 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

Отсутствие правильной круглой скобки в конце строки «using» –

3

Ну, если это часть SqlCommand Например, вы просто добавить его к тексту:

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. 
} 

Я допрашивать необходимость этого, однако. Если вы вставляете личность в таблицу с достаточной частотой, которую используете код, я бы рекомендовал хранимую процедуру для вашей вставки. Вы бы затем вызвать его в основном таким же образом:

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, хранимые процедуры с «usp_» с префиксом, моими глазами, моими глаза, это burrrrrrns! ;) – Rob

+0

@Rob - да, я знаю, старая конвенция. Мне это действительно нравится, потому что его легче найти в студии управления (для меня). Он не служит никакой другой цели. Если вы, возможно, захотите, я могу изменить его. Для тебя. : P – AllenG

+2

Мех - долго, поскольку это не «sp_», см.: Http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/don-t-start-your-procedures-with-sp_ –