插入行后从表中返回标识值

时间:2014-01-13 20:18:09

标签: asp.net vb.net identity

我试图在将其插入行后从表中存储标识值的值。

我想将值存储在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 个答案:

答案 0 :(得分:2)

您可以尝试将此SELECT添加到您的命令中:

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

执行如下查询:

Dim currentID as Integer = cmd.ExecuteScalar()

而不是.ExecuteNonQuery()

附注:在构造内联命令时尽量不要使用字符串连接。而是研究参数化查询。

答案 1 :(得分:2)

使用Sql Server,您可以传递两个sql命令,用分号分隔它们 第二个命令是SELECT SCOPE_IDENTITY(),它返回在此范围中插入的最后一个ID 您可以执行这两个命令并使用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()