آژانس هواپیمایی
pop up

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

شروع موضوع توسط kh.rabeti ‏1 سپتامبر 2007 در انجمن دات نت

  1. kh.rabeti

    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()
     
  2. _H2_

    _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 بنویسید تا بهتر نمایش داده شوند.
     
  3. amin_lili

    amin_lili کاربر تازه وارد

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