PDA

View Full Version : نمایش آخرین رکورد ذخیره شده در دیتابیس



hadiM18
جمعه 30 مرداد 1388, 11:45 صبح
سلام
من می خوام آخرین رکوردی که توی یک جدول در دیتابیس ذخیره شده رو هنگام لود فرم
توی یک تکست باکس نشون بدم
چطوری میشه ان کار رو کرد؟؟؟؟؟؟
لطفا اگه کسی می تونه کمک کنه

raha_20
جمعه 30 مرداد 1388, 11:50 صبح
خوب باید بعد از انجام ارتباطات و خواندن اطلاعات جدول وقرار دادن آن داخل dataset , و ارتباط با data view آخرین رکورد را از dataview بخونی و نشان بدی

مبین رنجبر
جمعه 30 مرداد 1388, 11:54 صبح
اگر با فرض اینکه جدول ما 2 فیلد داره و دیتابیس ما SQL Server باشه بصورت زیر میتونین آخرین رکورد رو برگردونین :



DataTable dt = new DataTable();
string id;
string bookname;
id = dt.Rows[dt.Rows.Count - 1]["ID"].ToString();
bookname = dt.Rows[dt.Rows.Count -1]["BookName"].ToString();
با توجه به تعداد فیلد ها این کارو باید تکرار کنید

shahab_ss
جمعه 30 مرداد 1388, 12:05 عصر
id = dt.Rows[dt.Rows.Count - 1]["ID"].ToString();
حالا اگر فیلد ID بصورت Auto Increment تعریف نشده باشه ، اونوقت چی ؟؟:چشمک:

raha_20
جمعه 30 مرداد 1388, 12:06 عصر
اگه با data viwe بخواهیم بنویسیم هم میشه.؟

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

مبین رنجبر
جمعه 30 مرداد 1388, 12:10 عصر
id = dt.Rows[dt.Rows.Count - 1]["ID"].ToString();
حالا اگر فیلد ID بصورت Auto Increment تعریف نشده باشه ، اونوقت چی ؟؟:چشمک:



اگه Auto Increment باشه با این کوئری میشه آخرین رکورد رو برگردوند :



SELECT `field`
FROM `table`
ORDER BY `field` DESC
LIMIT 1 ;

Reza_Yarahmadi
جمعه 30 مرداد 1388, 18:35 عصر
مواردی که دوستان گفتند درسته فقط یه مشکل کوچیک داره!! اونم اینه که اگه توی بانک تعداد رکوردها زیاد باشه (مثلا چند میلیون رکورد) و برنامه هم تحت شبکه و یا وب باشه داده های زیادی باید به کلاینت منتقل بشه که این زمان زیادی میگیره، حتی اگه برنامه ، یه WinApp ساده با تعداد رکورد بالا باشه بازم زمانگیر میشه.
بهتره کوئری رو طوری بنویسی که فقط یک رکورد رو برگردونه.
اگر آخرین رکورد بر اساس ترتیب فیلد خاصی باشه که کار احته کافیه اول بصورت نزولی مرتب بشه بعد اولین رکورد خونده بشه

Select Top 1 * From TableName Order By FieldName Desc
ولی اگه آخرین رکورد فقط براساس زمان ثبت باید پیدا بشه میشه از روشی مثل روش زیر استفاده کرد:

SELECT *,ID_Num = IDENTITY(int, 1, 1) into #temp from TableName
select * from #temp where ID_num=@@rowcount
drop table #temp
این روش هم یه مقدار زمانگیره ولی چون این عملیات تماما توی بانک انجام میشه سرعت اجرای بهتری داره.

raha_20
جمعه 30 مرداد 1388, 19:49 عصر
اگه تو بانک فیلد increment داشته باشیم و بخواهیم اطلاعات درج کنیم اگه مقداردهی واسه اون فیلد انجام ندیم خودش به صورت اتوماتیک واسه اون فیلد مقدار بعدی ر ا نمی زاره ؟؟؟؟؟؟؟

چرا اینجوری ؟
؟
؟

اَرژنگ
جمعه 30 مرداد 1388, 20:29 عصر
مواردی که دوستان گفتند درسته فقط یه مشکل کوچیک داره!! اونم اینه که اگه توی بانک تعداد رکوردها زیاد باشه (مثلا چند میلیون رکورد) و برنامه هم تحت شبکه و یا وب باشه داده های زیادی باید به کلاینت منتقل بشه که این زمان زیادی میگیره، حتی اگه برنامه ، یه WinApp ساده با تعداد رکورد بالا باشه بازم زمانگیر میشه.
بهتره کوئری رو طوری بنویسی که فقط یک رکورد رو برگردونه.
اگر آخرین رکورد بر اساس ترتیب فیلد خاصی باشه که کار احته کافیه اول بصورت نزولی مرتب بشه بعد اولین رکورد خونده بشه

Select Top 1 * From TableName Order By FieldName Desc
ولی اگه آخرین رکورد فقط براساس زمان ثبت باید پیدا بشه میشه از روشی مثل روش زیر استفاده کرد:

SELECT *,ID_Num = IDENTITY(int, 1, 1) into #temp from TableName
select * from #temp where ID_num=@@rowcount
drop table #temp
این روش هم یه مقدار زمانگیره ولی چون این عملیات تماما توی بانک انجام میشه سرعت اجرای بهتری داره.
اساس حرفتان کاملا درست است، در بانک انجام دادن بهتر از به کلاینت کشنادن است، میشه اینطوری یکمی ساده‌اش کرد (به شرطی که Id یک فیلده افزایشی باشد):

select * from table where id=Max(id)

اَرژنگ
جمعه 30 مرداد 1388, 20:35 عصر
id = dt.Rows[dt.Rows.Count - 1]["ID"].ToString();
حالا اگر فیلد ID بصورت Auto Increment تعریف نشده باشه ، اونوقت چی ؟؟:چشمک:

در آن حالت آخرین رکورد معنی ندارد.آخرین رکورد را چطوری تعریف میکند. بدانه داشتن یک فیلده افزایشی (تاریخ اینسرت، آیدی،...) چیزی به اسمه آخرین رکورد نمیشه داشت. آخرین رکورد بر چه حسابی؟

shahnameh
پنج شنبه 26 اردیبهشت 1392, 18:22 عصر
منم همین مشکل را دارم کسی میتونه کمک کنه

منم میخوام اخرین رکورد را بدون رفرش صفحه نشون بده