خواندن Identity رکورد اضافه شده


در بسیاری از مواقع، نیاز داریم که primary key مربوط به رکوردی که به جدول اضافه می کنیم را بدانیم، یک راه حل این است که پس از اضافه کردن رکورد، رکورد آخر جدول را بخوانیم ولی اگر پس از شما کسان دیگری رکوردهای دیگری اضافه کرده باشند چه؟

به نظر من مطمئن ترن روش استفاده از پارامتر IdentID است، identid یکی از پارامترهای SQL Server است که هنگام  پایان یافتن عملیات Insert با مقدار موجود در فیلد identity و یا همان pk پر و بازگردانده می شود.

تابع زیر را به منظور انجام عملیات insert و همچنین دریافت فیلد identity به زبان vb.net نوشته ام که احتمالا برای تبدیل آن به C# مشکلی ندارید ولی اگر لازم باشد نسخه C# هم آماده خواهم کرد.

فقط این نکته را به خاطر داشته باشید که در صورت تمایل می توانید عملیات SQL را در یک Stored Procedure بنویسید و آن را در Code behind فراخوان و اجرا نمایید.


Public Function InsertDirectly(ByVal fieldname As String, ByVal fieldvalue As String, Optional ByVal tr As SqlClient.SqlTransaction = Nothing, Optional ByVal UserCN As SqlClient.SqlConnection = Nothing) As Integer
        'By Alireza
        Dim cmd As New SqlClient.SqlCommand
        If Not UserCN Is Nothing Then
            cmd.Connection = UserCN
        Else
            cn.Open() 'there was a cn object in the scope of the class
            cmd.Connection = cn
        End If

        cmd.CommandType = CommandType.Text
        cmd.Parameters.Add("@IdentID", SqlDbType.Int)
        cmd.Parameters("@IdentID").Direction = ParameterDirection.Output
        cmd.CommandText = "INSERT INTO " + TableName + " (" + fieldname + ") VALUES(" + fieldvalue + ")" & vbCrLf
        cmd.CommandText &= " SET @IdentID=(SELECT SCOPE_IDENTITY())" & vbCrLf

        If Not tr Is Nothing Then cmd.Transaction = tr

        cmd.ExecuteNonQuery()
        Dim retval As Integer
        Try
            retval = cmd.Parameters("@IdentID").Value
        Catch
        End Try
        cn.Close()
        Return retval
    End Function

هیچ نظری موجود نیست: