در بسیاری از مواقع، نیاز داریم که 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
هیچ نظری موجود نیست:
ارسال یک نظر