Как получить идентификатор вставки из этого ADODB.Recordset? - PullRequest
9 голосов
/ 01 апреля 2011

Я стараюсь избегать использования простых запросов SQL в своем веб-приложении. Я оглянулся и пришел к выводу, что ADO Recordset s будет лучшим или, по крайней мере, самым безопасным инструментом для работы. Мне нужно вставить записи в таблицу базы данных. К сожалению, я не знаю, как получить значение идентификатора для только что вставленной записи. Вот сокращение того, что я получил сейчас:

<%
dim insertID, rs
set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "my_table_name", conn, adOpenForwardOnly, adLockOptimistic

rs.AddNew()

Call m_map_values_to_rs(rs)

rs.Update()

insertID = rs("id")

rs.Close()
rs = Nothing
%>

Код, который у меня есть, успешно вставляет запись, но я не могу понять, как получить поле идентификатора Recordset для обновления после вставки. Как я могу получить значение столбца идентификаторов из этого Recordset?

ОБНОВЛЕНИЕ - Вот решение с кодом выше.

Мне пришлось изменить тип курсора на adOpenKeyset вместо adOpenForwardOnly. После того, как я это сделал, запись автоматически обновляется новым значением поля «автоматический номер» после вставки. Однако это не , как вы думаете. Значение rs("id") не становится целым числом или даже вариантом. Это становится своего рода Automation типом и не может быть оценено как число. Также нельзя по какой-то причине использовать CInt () непосредственно для этого типа. Итак, что вы должны сделать, это преобразовать значение в строку, а затем преобразовать его в Int. Вот как мне это удалось:

insertID = CInt( rs("id") & "" )

Спасибо Ди за ответ. Это очень помогло.

1 Ответ

3 голосов
/ 01 апреля 2011

Эта статья объясняет способы получения значения идентификатора с помощью примера кода.

Соответствующий фрагмент кода:

<% 
    fakeValue = 5 
    set conn = CreateObject("ADODB.Connection") 
    conn.open "<conn string>" 
    sql = "INSERT someTable(IntColumn) values(" & fakeValue & ")" & _ 
        VBCrLf & " SELECT @@IDENTITY" 
    set rs = conn.execute(sql) 
    response.write "New ID was " & rs(0) 
    rs.close: set rs = nothing 
    conn.close: set conn = nothing 
%>
...