به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
با سلام
دوستان من میخوام آی دی آخرین رکورد ثبت شده در جدولم رو به دست بیارم.زبان برنامه نویسی که استفاده میکنمASPهست و ارتباط از طریق LINQ انجام شده.(ستون ID به صورت خودکار مقدار دهی میشه.یعنی به ازای هر رکورد یک واحد به آن اضافه میشود!)
خواهشا کمک کنید...
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
سلام کلا برای پیدا کردن آخرین رکورد باید اینطور عمل بشه به طور مثال من می خوام آی دی آخرین رکورد رو داخل یک لیبل نشون بدم
label1.text=dt.rows[dt.rows.count-1]["نام فیلد"]
البته این LINQ نیست ولی در کل این طور میشه که داخل قسمت اول دیتا تیبل که شماره سطر رو باید قرار بدی شما به جای شماره سطر تعداد رکوردها -1 رو قرار بده میبینی به آخرین رکورد جدول اشاره میکنه موفق باشی
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
نقل قول:
نوشته شده توسط
mamad174
سلام کلا برای پیدا کردن آخرین رکورد باید اینطور عمل بشه به طور مثال من می خوام آی دی آخرین رکورد رو داخل یک لیبل نشون بدم
label1.text=dt.rows[dt.rows.count-1]["نام فیلد"]
البته این LINQ نیست ولی در کل این طور میشه که داخل قسمت اول دیتا تیبل که شماره سطر رو باید قرار بدی شما به جای شماره سطر تعداد رکوردها -1 رو قرار بده میبینی به آخرین رکورد جدول اشاره میکنه موفق باشی
سلام
ممنون از جوابتون
راه دیگه ای وجود نداره که نخوام از دیتا تیبل استفاده کنم؟؟؟
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
با سلام
int last = (from it in datacontext.UserDatas
select it.ID).Max();
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
همچنین میتونی جدولت رو بر حسب فیلد مورد نظرت به صورت نزولی مرتب کنی اونوقت اخرین رکورد میشه اولین رکورد
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
نقل قول:
نوشته شده توسط
Majid.Stu66
با سلام
int last = (from it in datacontext.UserDatas
select it.ID).Max();
سلام
ممنون از جوابتون
بالاخره بعد از امتحان کردن انواعِ کوئری ها این کد بهم جواب داد...
ولی خیلی دوست داشتم از استورپروسیجر برای به دست آوردن آخرین آی دی استفاده کنم
راهی وجود داره؟؟؟
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
نقل قول:
نوشته شده توسط
rezaei_y
همچنین میتونی جدولت رو بر حسب فیلد مورد نظرت به صورت نزولی مرتب کنی اونوقت اخرین رکورد میشه اولین رکورد
جدول برحسب فیلدموردِ نظرم مرتب هست...و من هم همون آخرین رکوردی که میگین رو میخوام...راه به دست آوردنشو نمیدونستم...
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
نقل قول:
ولی خیلی دوست داشتم از استورپروسیجر برای به دست آوردن آخرین آی دی استفاده کنم
راهی وجود داره؟؟؟
با سلام مجدد
پروسیجری که باید نوشته شه :
Create PROCEDURE LastRecordID(@output int OUTPUT)
AS
BEGIN
set @output=(select Max(ID) From UserData)
END
در برنامه دو خط کد زیر استفاده میشه و مقدار بازگشتی در متغیر ارسال شده به پروسیجر قرار می گیره
int? MaxId = -1;
datacontext.LastRecordID(ref MaxId);
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
نقل قول:
نوشته شده توسط
Majid.Stu66
datacontext.LastRecordID(ref MaxId);[/CODE]
باز هم ممنون
میشه توضیح بدین برای چی از ref استفاده کردید؟؟؟
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
قبل از پاسخ به سوال شما :
معمولا برای استخراج تک مقدار از فانکشن استفاده می کنن که پیاده سازی فانکش عملکرد مورد نظر شما بصورت زیر هستش
Create FUNCTION MaxID()
RETURNS int
AS
BEGIN
Declare @Out int
Set @Out=(select Max(ID) From UserData)
RETURN @Out
END
کد مورد استفاده در برنامه
int? ID = datacontext.MaxID();
بازگشت مقدار از پروسیجر با دستور سلکت صورت می گیره و از نوع
ISingleResult<LastIDResult>
هستش که اگه بخوایم به این صورت پروسیجر رو استفاده کنیم کد نوشته شده در سمت برنامه بصورت زیر :
ISingleResult<LastIDResult> Maxid = datacontext.LastRecordID();
foreach (LastIDResult item in Maxid)
{
MessageBox.Show(item. LastRecID.ToString());
}
و پروسیجر به شکل :
Create PROCEDURE LastRecordID
AS
BEGIN
select Max(ID) As LastRecID From UserData
END
خواهد بود .
در پاسخ به سوال شما برای اینکه یه مقدار کاهش کد داشته باشیم و بصورت فوق کد نویسی نکنیم متغیر رو به شکل کال بای ریفرنس (فراخوانی با ارجاع) به پروسیجر ارسال می کنیم که داخل پروسیجر مقدارش عوض شه و از اون مقدار در برنامه استفاده کنیم. این نوع فراخوانی نیاز به مقدار دهی متغیر قبل از ارسال داره ، به همین خاطر قبل از ارسال مقدار منفی یک بهش نسبت داده شده . اگر هیچ رکوردی در جدول وجود نداشته باشه مقدار بازگشتی از پروسیجر نال خواهد بود . در نتیجه باید بعد از فراخوانی مقدار متغیر رو بررسی کرد که نال نباشه بعد ازش استفاده کرد .
در پایان از دوستان خواهش می کنم هر جاش رو اشتباه گفتم اصلاح کنن.
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
از توضیح کاملی که دادین ممنونم...
خیلی بهم کمک کرد...
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
استفاده از تابع Max اصلا بهینه نیست ، بخصوص اینکه تعداد رکوردهای ما زیاد باشه. SqlServer بین تمامی رکوردها میگرده و بیشترین مقدار رو بر میگردونه و این اصلا چیز خوبی نیست. کاربرد تابع Max در برگردندن آخرین Id نیست بلکه کاربرد این تابع برگردوندن بیشترین مقدار از یک ستون برای ماست مثلا کاربر صحیح میتونه استفاده از این تابع برای گرفتن بیشترین امتیاز یک کاربر هست.
برای برگردوندن Id آخرین رکورد ثبت شده از SELECT SCOPE_IDENTITY()
استفاده کنید.
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
نقل قول:
از توضیح کاملی که دادین ممنونم...
خیلی بهم کمک کرد...
خواهش می کنم ولی گفته این دوست عزیز رو هم در نظر بگیرید.
نقل قول:
استفاده از تابع Max اصلا بهینه نیست ، بخصوص اینکه تعداد رکوردهای ما زیاد باشه. SqlServer بین تمامی رکوردها میگرده و بیشترین مقدار رو بر میگردونه و این اصلا چیز خوبی نیست. کاربرد تابع Max در برگردندن آخرین Id نیست بلکه کاربرد این تابع برگردوندن بیشترین مقدار از یک ستون برای ماست مثلا کاربر صحیح میتونه استفاده از این تابع برای گرفتن بیشترین امتیاز یک کاربر هست.
با سلام خدمت دوست گرامی alireza_s_84
گفته شما کاملا درست هستش . هر چیزی رو باید در جای خود به کار برد.
در رابطه با
SELECT SCOPE_IDENTITY()
آیا باید همراه با یک دستور Insert
بکار برده بشه تا آخرین مقدار رو بر گردونه یا بصورت تنها مقدار مورد نظر رو بر می گردونه ؟
چون تا جایی که من متوجه شدم تو استفاده از این تابع بحث میدان دید ( اسکوپ ) که می تونه تابع ، پروسیجر ، تریگر و غیره باشه و بحث ُSession
که پایگاه داده هستش پیش میاد . و این تابع باید درون اسکوپ به همراه یک دستور insert
باشه که مورد استفاده دوستمون فقط گرفتن آخرین مقدار هستش نه دستور Insert
.
ممنون میشم اگه توضیح بدید.
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
نقل قول:
نوشته شده توسط
alireza_s_84
استفاده از تابع Max اصلا بهینه نیست ، بخصوص اینکه تعداد رکوردهای ما زیاد باشه. SqlServer بین تمامی رکوردها میگرده و بیشترین مقدار رو بر میگردونه و این اصلا چیز خوبی نیست. کاربرد تابع Max در برگردندن آخرین Id نیست بلکه کاربرد این تابع برگردوندن بیشترین مقدار از یک ستون برای ماست مثلا کاربر صحیح میتونه استفاده از این تابع برای گرفتن بیشترین امتیاز یک کاربر هست.
برای برگردوندن Id آخرین رکورد ثبت شده از
SELECT SCOPE_IDENTITY()
استفاده کنید.
درسته....اینو همون دیشب امتحان کردم...
ولی یکم با فهمیدنش مشکل دارم...
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
نقل قول:
نوشته شده توسط
Majid.Stu66
خواهش می کنم ولی گفته این دوست عزیز رو هم در نظر بگیرید.
با سلام خدمت دوست گرامی
alireza_s_84
گفته شما کاملا درست هستش . هر چیزی رو باید در جای خود به کار برد.
در رابطه با
SELECT SCOPE_IDENTITY()
آیا باید همراه با یک دستور
Insert
بکار برده بشه تا آخرین مقدار رو بر گردونه یا بصورت تنها مقدار مورد نظر رو بر می گردونه ؟
چون تا جایی که من متوجه شدم تو استفاده از این تابع بحث میدان دید ( اسکوپ ) که می تونه تابع ، پروسیجر ، تریگر و غیره باشه و بحث
ُSession
که پایگاه داده هستش پیش میاد . و این تابع باید درون اسکوپ به همراه یک دستور
insert
باشه که مورد استفاده دوستمون فقط گرفتن آخرین مقدار هستش نه دستور
Insert
.
ممنون میشم اگه توضیح بدید.
SOCPE_ADENTITY رو میتونید بعد از Insert به کار ببرید و برای جاهای دیگه میتونید از توابع دیگه ای مثل IDENT_CURRENT و IDENTITY@@ استفاده کنید.
هر سه ی این توابع یک کار انجام میدن در رابطه با حوزه و جلسه تفاوت هایی باهم دارن. برای مثال SCOPE_ADENTITY محدود به جلسه جاری میشه ولی IDENTITY@@ محدودیتی نداره.
در واقع بهترین گزینه برای داشتن آخرین ID در یک جدول استفاده از:
IDENT_CURRENT( 'table_name' )
هست که نه به اسکوپ محدود میشه و نه جلسه بلکه به جدولی که اسم میبریم محدود میشه.
میتونید توی این لینک اطلاعات بیشتری کسب کنید:
http://technet.microsoft.com/en-us/l.../ms190315.aspx
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
نقل قول:
نوشته شده توسط
alireza_s_84
SOCPE_ADENTITY رو میتونید بعد از Insert به کار ببرید و برای جاهای دیگه میتونید از توابع دیگه ای مثل IDENT_CURRENT و IDENTITY@@ استفاده کنید.
هر سه ی این توابع یک کار انجام میدن در رابطه با حوزه و جلسه تفاوت هایی باهم دارن. برای مثال SCOPE_ADENTITY محدود به جلسه جاری میشه ولی IDENTITY@@ محدودیتی نداره.
در واقع بهترین گزینه برای داشتن آخرین ID در یک جدول استفاده از:
IDENT_CURRENT( 'table_name' )
هست که نه به اسکوپ محدود میشه و نه جلسه بلکه به جدولی که اسم میبریم محدود میشه.
میتونید توی این لینک اطلاعات بیشتری کسب کنید:
http://technet.microsoft.com/en-us/l.../ms190315.aspx
ممنون از پاسخ تون
نقل قول: به دست آوردن آی دی آخرین رکورد ثبت شده در دیتا بیس
نقل قول:
نوشته شده توسط
Majid.Stu66
با سلام
int last = (from it in datacontext.UserDatas
select it.ID).Max();
خیلی ازتون بابت پاسختون متشکرم