2014-01-13 1 views
0

Я пытаюсь сохранить значение идентификатора из таблицы после вставки его в строку.Значение возвращаемого идентификатора из таблицы после вставки строки

Я хочу сохранить значение в currentID, чтобы сохранить значение в другой таблице, которую можно было добавить более одного раза.

Любая помощь или совет были бы замечательными!

Dim currentID As Integer 

     Dim cmd As New System.Data.SqlClient.SqlCommand 
     cmd.CommandType = System.Data.CommandType.Text 

     cmd.CommandText = "INSERT INTO table (Databasevalue) VALUES ('" + formvalue + "');"     

     cmd.Connection = sqlconninsertDB 

     sqlconninsertDB.Open() 
     cmd.ExecuteNonQuery() 

     **currentID = [get and store value]** 

     sqlconninsertDB.Close() 

ответ

2

Вы можете попробовать добавить этот ВЫБРАТЬ вашу команду:

cmd.CommandText = "INSERT INTO table (Databasevalue) VALUES ('" + formvalue + "'); SELECT SCOPE_IDENTITY()" 

И выполнить запрос так:

Dim currentID as Integer = cmd.ExecuteScalar() 

Вместо .ExecuteNonQuery()

Side Примечание: Старайтесь не использовать конкатенации строк при построении встроенных команд. Скорее посмотрите на параметризованные запросы.

2

С Sql Server вы можете передать две команды sql, разделяя их точкой с запятой.
Вторая команда - SELECT SCOPE_IDENTITY(), и это возвращает последний идентификатор, вставленный в эту область.
Можно выполнить обе команды и получить результат с ExecuteScalar

Пожалуйста, обратите внимание, чтобы использовать параметризованный запрос вместо конкатенации, чтобы избежать Sql атаки Injection и проблемы синтаксического анализа.

Dim currentID As Integer 
    Dim cmd As New System.Data.SqlClient.SqlCommand 
    cmd.CommandType = System.Data.CommandType.Text 

    cmd.CommandText = "INSERT INTO table (Databasevalue) VALUES (@formval); " + 
         "SELECT SCOPE_IDENTITY()"     
    cmd.Connection = sqlconninsertDB 
    cmd.Parameters.AddWithValue("@formval", formValue) 
    sqlconninsertDB.Open() 
    currentid = cmd.ExecuteScalar() 
    sqlconninsertDB.Close() 
+0

Вы также можете использовать: Выберите [@@ IDENTITY] (http://technet.microsoft.com/en-us/library/ms187342.aspx) – codechurn

+1

@codechurn не совсем то же самое, [SCOPE_IDENTITY против @ @IDENTITY против IDENT_CURRENT] (http://www.codeproject.com/Articles/103610/Difference-between-IDENTITY-SCOPE_IDENTITY-IDENT_C) – Steve

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