PDA

View Full Version : حرفه ای: خواندن Identity رکورد اضافه شده



Alireza.AM
دوشنبه 11 دی 1391, 19:52 عصر
در بسیاری از مواقع، نیاز داریم که عدد ثبت شده در فیلد primary key مربوط به رکوردی که به جدول اضافه می کنیم را بدانیم، این مقدار معمولا به صورت خودکار در فیلد مربوطه ثبت میشود و ما آن را در Insert Query تعین نمی‌کنیم. یک راه حل این است که پس از اضافه کردن رکورد، رکورد آخر جدول را بخوانیم ولی اگر پس از شما کسان دیگری رکوردهای دیگری اضافه کرده باشند چه؟

به نظر من مطمئن ترین روش استفاده از پارامتر 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