插入mssql后获取自动递增的id

时间:2014-10-31 10:12:50

标签: vb.net

我使用下面的代码插入记录我没有插入“Id”,因为它被设置为自动增量网络。无论如何,我希望在插入后获得为该记录分配的id。你能救我吗?我尝试使用executecalar如下,但它无法正常工作。感谢。

Public Function Add() As Integer
        Dim rowId As Integer
        Dim strcon = New AppSettingsReader().GetValue("ConnectionString", GetType(System.String)).ToString()
        Using con As New SqlConnection(strcon)
            Using cmd As New SqlCommand("INSERT INTO tbProjekt (Nazwa, Autor, Datautworzenia, Visible) VALUES (@Nazwa, @Autor, @Datautworzenia, @Visible)", con)
                cmd.CommandType = CommandType.Text
                cmd.Parameters.AddWithValue("@Nazwa", Nazwa)
                cmd.Parameters.AddWithValue("@Autor", Autor)
                cmd.Parameters.AddWithValue("@DataUtworzenia", DataUtworzenia)
                cmd.Parameters.AddWithValue("@Visible", Visible)
                con.Open()
                rowId = Convert.ToInt32(cmd.ExecuteScalar())
                con.Close()
            End Using
        End Using
        Return rowId
    End Function

1 个答案:

答案 0 :(得分:1)

使用SCOPE_IDENTITY()

替换此行

 Using cmd As New SqlCommand("INSERT INTO tbProjekt (Nazwa, Autor, Datautworzenia, Visible) VALUES (@Nazwa, @Autor, @Datautworzenia, @Visible)", con)

使用此行

 Using cmd As New SqlCommand("INSERT INTO tbProjekt (Nazwa, Autor, Datautworzenia, Visible) VALUES (@Nazwa, @Autor, @Datautworzenia, @Visible); SELECT NEWID = SCOPE_IDENTITY()", con)

你也可以改变这个

 rowId = Convert.ToInt32(cmd.ExecuteScalar())

到此

 rowId = cmd.ExecuteScalar()