PDA

View Full Version : آموزش: روش های بدست آوردن شماره آخرین رکورد Insert شده به پایگاه داده



gilas1368
پنج شنبه 23 تیر 1390, 17:02 عصر
با سلام
با خودم فکر کردم شاید این مطلب بدرتون بخوره به همین خاطر این تاچیک رو ایجاد کردم
خب 4 روش برای فهمیدن شماره آخرین رکورد add شده به جدول وجود داره که عبارتند از:
1-استفاده از تابع MAX : ولی باید توجه داشت که این تابع باعث میشه بار اضافی زیادی برای پیدا کردن بیشترین مقدار شماره رکورد پس از هر دستور Insert به SQL server وارد میکنه و شاید اصلا نشه ازش به عنوان یه روش یاد کرد.
2-استفاده از متغیرidentity@@ : فقط در هنگام استفاده از این روش باید یه سری نکات رو بدونین
2-1 : این متغیر آخرین مقدار identity درج شده در connection فعلی رو برمی گردونه.بدین ترتیب این امکان وجود داره که مقدار identity یه جدول دیگه رو برگردونه.
2-2 :در صورتیکه برای Insert کردن از یه Trigger استفاده کرده باشین و داخلش عملیات Insert رو انجام بدین باعث میشه مقدار ناخواسته ای رو برگردونه
3- ()SCOPE_IDENTITY :که برخلاف identity@@ به اتصال ومحدوده فراخوانی وابستس.یعنی اگر مثلا این دستور داخل یه stored procedure فراخوانی بشه،آخرین مقدار Insert شده تو دستوراتی که داخل این stored procedure وجود داره رو برمی گردونه و به مقادیر Insert شده تو خارج از این stored procedure کاری نداره
4-('tabelname') IDEN_CURRENT:استفاده از این تابع در نگاه اول باعث خواناتر شدن برنامه میشه ام از طرف دیگه این مقدار به ارتباط جاری یا محدوده انجام عملیات ثبت وابسته نیست و این یعنی اینکه اگر چند کاربر بطور همزمان چند دستور Insert رو انجام بدن ممکنه بعد از ثبت و فراخوانی این تابع ، مقداری رو که برگردونه درست نباشه بنابراین نتیجه ای که از این تابع می گیریم اینه که این تابع در محیط هایی که چندین تماس به طور همزمان داخل اونا انجام میشه کارایی نداره


متشکرم

mersa_gulf
پنج شنبه 23 تیر 1390, 17:21 عصر
این دستورات تو access کار میککند یا sql? میشه یه مثال از تابع ()IDEN_CURRENT بزنید، بعد از دستور insert و اجرای دستور نوشته میشوند؟

gilas1368
پنج شنبه 23 تیر 1390, 19:13 عصر
اين دستورات داخل SQL استفاده ميشن
مثلا براي IDEN_CURREN() شما اول يه ركورد رو به جدولتون اضافه مي كنيد و بعد بوسيله كداي زير شماره آخرين ركوردتون رو بدست ميارين و داخل يه textbox مي ريزين


Sqlcommand cmd=new sqlcommand();
cmd.connection=connection string;
cmd.commandText="Select IDEN_CURRENT('tabelname')";
SqlDataAdapter da=new sqldataadapter(cmd);
Dataset ds=new dataset();
da.fill(ds);
Int value=(int)cmd.extecutescaler();
Textbox1.text=value.tostring();




اميدوارم پاسخ سؤالاتتون رو داده باشم
موفق باشيد

m_soheyl_s
دوشنبه 10 آذر 1393, 08:46 صبح
پس بهترین روش ()SCOPE_IDENTITY است؟
با توجه به امکان دسترسی چند کاربر و اینکه میخوام در استور پروسیجر آی دی همان رکوردی که این کاربر اضافه کرده به دست بیارم.
:متفکر:

gilas1368
دوشنبه 10 آذر 1393, 17:08 عصر
پس بهترین روش ()SCOPE_IDENTITY است؟
با توجه به امکان دسترسی چند کاربر و اینکه میخوام در استور پروسیجر آی دی همان رکوردی که این کاربر اضافه کرده به دست بیارم.
:متفکر:

با توجه به چیزی ک شما میخاید بله

mmbguide
جمعه 13 شهریور 1394, 19:47 عصر
سلام

من تو برنامه از یک دیتاست نوع دار استفاده کردم که چندتا dataTable داره و هر datatable یک TableAdapter که هر tableAdapter هم چها دستور که یکی از اونها Insert هستش. چطور میشه Scope_Identity رو به دستورات SQL مربوط به Insert اضافه کرد. من هر کاری کردم نشد. اگه ممکنه راهنمایی کنید. بانک اطلاعاتی من هم Access هستش

ممنون

mmbguide
یک شنبه 15 شهریور 1394, 10:03 صبح
از Output هم استفاده کردم بازهم همون خطار رو میده. یکی کمکم کنه :لبخندساده:
135020

zayens
یک شنبه 15 شهریور 1394, 14:05 عصر
جناب mmbguide (http://barnamenevis.org/member.php?58349-mmbguide)
سوالتونو جدا توی تاپیک دیگه میفرمودید
این تاپیک مال سال 93 هستش