برگزیده های پرشین تولز

برای بدست آوردن ID رکورد جدیدا وارد شده باید چیکار کنم

kh.rabeti

کاربر تازه وارد
تاریخ عضویت
29 جولای 2007
نوشته‌ها
17
لایک‌ها
0
تو دات نت 2 برای بدست آوردن ID رکوردی که الان وارد کردیم چیکار باید بکنیم

کدی که نوشتم اینه



Dim conDB As SqlConnection

Dim cmdAddarticle As SqlCommand

Dim parmArticleID As SqlParameter

Dim variable as integer

conDB = New SqlConnection("server=.;uid=sa;pwd=;database=article_db")

cmdAddarticle = New SqlCommand("SP_InsertArticle", conDB)

cmdAddarticle.CommandType = commandtype.storedprocedure

parmArticleID = cmdAddarticle.Parameters.Add("returnvalue", SqlDbType.BigInt)

parmArticleID.Direction = ParameterDirection.ReturnValue



If txtKeyWords.Text.ToString <> "" Then

cmdAddarticle.Parameters.Add("@KeyWords", SqlDbType.NVarChar).Value = txtKeyWords.Text.ToString

Else

cmdAddarticle.Parameters.Add("@KeyWords", SqlDbType.NVarChar).Value = ""

End If

conDB.Open()



cmdAddarticle.ExecuteNonQuery()



variable = cmdAddarticle.Parameters("returnvalue").Value



conDB.Close()
 

_H2_

کاربر تازه وارد
تاریخ عضویت
27 می 2007
نوشته‌ها
35
لایک‌ها
0
سلام
اگر جدولتان AutoNumber استفاده میکند، میتوان گفت MAX فیلد کلیدتان آخرین سطری است که نصب شده

و اگر کلیدگذاری را خودتان کنترل میکنید (که من همیشه همین را استفاده میکنم) خوب پس کلید سطر مورد نظر را دارید. (خودتان میتوانید با به دست اوردن MAX فیلد کلید و اضافه کردن یک به آن کلید جدید بسازید و مشابه AutoNumber عمی کنید)

هر دو صورت فوق در حالی جواب صحیح میدهند که برنامه شما در یک ریسمان واحد اجرا شود (مثلاً تحت وب نباشد که در آن واحد شاید 200 سطر اضافه شود) اگر برنامه شما در حالت چند ریسمانی امکان دارد قرار بگیرد باید dbCommand ای را که عمل INSERT انجام میدهد، در ریسمان امن تعریف کنید (با دستور Shared در VB.Net یا static در C#.Net) و در زمان مقدار دهی پارامترها و اجرا و به دست آوردن کلید سطر اضافه شده (حال به هر یک از روشهای فوق) شی dbCommand مذکور را برای کلیه ریسمان ها قفل کنید


مثلاً این کد دو مقدار را با کمک SP اضافه میکند و فرض شده که روش به دست اورن کلید آخرین سطر در داخل خود SP پیاده سازی شده (به یکی از دو روش فوق) به Shared و SyncLock دقت کنید
کد:
[SIZE=2][COLOR=#0000ff]Private [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Shared[/COLOR][/SIZE][SIZE=2] dbCommand [/SIZE][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][SIZE=2] System.Data.SqlClient.SqlCommand[/SIZE]
 
[SIZE=2][SIZE=2][COLOR=#0000ff]Private [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Sub[/COLOR][/SIZE][SIZE=2] DataInsert([/SIZE][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][SIZE=2] StrField [/SIZE][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]String[/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][SIZE=2] IntField [/SIZE][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2][COLOR=#0000ff]   If[/COLOR][/SIZE][SIZE=2] dbCommand [/SIZE][SIZE=2][COLOR=#0000ff]Is [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Nothing [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE]
[SIZE=2]      dbCommand = [/SIZE][SIZE=2][COLOR=#0000ff]New[/COLOR][/SIZE][SIZE=2] System.Data.SqlClient.SqlCommand([/SIZE][SIZE=2][COLOR=#800000]"SPName"[/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]      dbCommand.CommandType = CommandType.StoredProcedure[/SIZE]
[SIZE=2]      dbCommand.Parameters.AddRange( _[/SIZE]
[SIZE=2][COLOR=#0000ff]          New[/COLOR][/SIZE][SIZE=2] System.Data.SqlClient.SqlParameter() { _[/SIZE]
[SIZE=2][COLOR=#0000ff]          New[/COLOR][/SIZE][SIZE=2] System.Data.SqlClient.SqlParameter([/SIZE][SIZE=2][COLOR=#800000]"@StrField"[/COLOR][/SIZE][SIZE=2], SqlDbType.NChar, 20, ParameterDirection.Input, [/SIZE][SIZE=2][COLOR=#0000ff]False[/COLOR][/SIZE][SIZE=2], 0, 0, [/SIZE][SIZE=2][COLOR=#0000ff]Nothing[/COLOR][/SIZE][SIZE=2], DataRowVersion.Current, [/SIZE][SIZE=2][COLOR=#0000ff]Nothing[/COLOR][/SIZE][SIZE=2]), _[/SIZE]
[SIZE=2][COLOR=#0000ff]          New[/COLOR][/SIZE][SIZE=2] System.Data.SqlClient.SqlParameter([/SIZE][SIZE=2][COLOR=#800000]"@IntField"[/COLOR][/SIZE][SIZE=2], SqlDbType.Int, 4, ParameterDirection.Input, [/SIZE][SIZE=2][COLOR=#0000ff]False[/COLOR][/SIZE][SIZE=2], 0, 0, [/SIZE][SIZE=2][COLOR=#0000ff]Nothing[/COLOR][/SIZE][SIZE=2], DataRowVersion.Current, [/SIZE][SIZE=2][COLOR=#0000ff]Nothing[/COLOR][/SIZE][SIZE=2])})[/SIZE]
[SIZE=2][COLOR=#0000ff]   End [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2][COLOR=#0000ff]   Dim[/COLOR][/SIZE][SIZE=2] iKey [/SIZE][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff]   Using[/COLOR][/SIZE][SIZE=2] dbCon [/SIZE][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]New[/COLOR][/SIZE][SIZE=2] System.Data.SqlClient.SqlConnection([/SIZE][SIZE=2][COLOR=#800000]"CONNECTIONSTRING"[/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]      dbCon.Open()[/SIZE]
[SIZE=2][COLOR=#0000ff]      SyncLock[/COLOR][/SIZE][SIZE=2] dbCommand[/SIZE]
[SIZE=2]          dbCommand.Connection = dbCon[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2][COLOR=#0000ff]          With[/COLOR][/SIZE][SIZE=2] dbCommand.Parameters[/SIZE]
[SIZE=2]             .Item(0).Value = StrField[/SIZE]
[SIZE=2]             .Item(1).Value = IntField[/SIZE]
[SIZE=2][COLOR=#0000ff]          End [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]With[/COLOR][/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2][COLOR=#0000ff]          Try[/COLOR][/SIZE]
[SIZE=2]              iKey = [/SIZE][SIZE=2][COLOR=#0000ff]CInt[/COLOR][/SIZE][SIZE=2](dbCommand.ExecuteScalar)[/SIZE]
[SIZE=2][COLOR=#0000ff]          Catch[/COLOR][/SIZE][SIZE=2] ex [/SIZE][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][SIZE=2] Exception[/SIZE]
[SIZE=2]              iKey = -1[/SIZE]
[SIZE=2][COLOR=#0000ff]          End [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Try[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff]      End [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]SyncLock[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff]   End [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Using[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff]End [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Sub[/COLOR][/SIZE]
[/SIZE]
ضمناً کدهایتان را داخل تگ CODE بنویسید تا بهتر نمایش داده شوند.
 

amin_lili

کاربر تازه وارد
تاریخ عضویت
24 آپریل 2007
نوشته‌ها
532
لایک‌ها
2
سن
43
محل سکونت
ای کاش آنجا ...
توی sql server از کد return @@IDENTITY استفاده کن
 
بالا