ورود

نسخه کامل مشاهده نسخه کامل : حرکت به عقب در دیتابیس در #C



i2ib4sunshine
23-05-2009, 00:51
با سلام

من یه سوال خیلی ساده کارم اما نمی دونم چرا جوابشو تا حالا پیدا نکردم !

من می خوام تو یک دیتابیس SQL تو #c تو رکوردها پیمایش کنم (به عقب و جلو برم) و شروط BOF و EOF رو تست کنم و Index رکورد رو داشته باشم
برنامم حالت پردازشی داره یعنی فقط رو رکوردها پردازش می کنه و از کنترلهایی مثل Grid استفاده نمی کنم.

ظاهرا که باید از Dataset استفاده کنم اما تو هیچ کدوم از متدهای Dataset و DataTable و DaraRow و ... همچین دستوری پیدا نکردم

یک چیزی مثل متد Read تو DataReader اما با قابلیت حرکت به عقب
این کار تو دلفی خیلی راحت انجام میشه اما اینجا نمیدونم چرا نیست !

با تشکر فراوان

_H2_
23-05-2009, 01:57
سلام
C#.Net به صورت پیشفرض به جای ADO از ADO.Net استفاده میکند، ودیگر EOF و BOF و... وجود ندارد.
در ADO.Net شما یاباید از DataReader استفاده کنید، که یک خواننده پر سرعت ReadOnly روبه جلو است یا از DataAdapter و DataTable.
(در واقع DataAdapte با کمک DataReader مخزن DataTable را پر میکند.)

=====

اگر مدام نمیخواهید در دیتاها عقب و جلو بروید، و یک بار خواندن برای شما کافی است DataReader بازدهی و سرعت بسیار دارد.
برای خواندن برعکس هم شما به راحتی میتوانید دستور SQL اصلی را عکس کنید.
یعنی تفاوت دو دستور زیر...

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

=====

در غیر این صورت زوج DataAdapter و DataTable مطرح میشوند.
بعد از Fill کردن، کلیه اطلاعات در قالب یک Collection-List از خصیصه DataTable.Rows در دسترس هستند.
یعنی شما به راحتی میتوانید از Count تعداد کل سطرها را بخوانید و با دادن ایندکس به سطر مورد نظر دسترسی پیدا کنید، به راحتی دسترسی به یک آرایه !!!
جلو و عقب و پرش و... !!!

=====

در نهایت اگر عاشق سیستم ADO و EOF و BOF و اینها هستید (فکر میکنم سرم درد میگیره و میخواهم DataReader خودمان را بقل کنم!) میتوانید از activex آن را در بستر COM به پروزه add reference کنید و از ان استفاده کنید.
ولی پیشنهاد میکنم خودتان را با روشهای جدید منطبق کنید.

موفق باشید.

i2ib4sunshine
23-05-2009, 10:47
بسیار ممنون از جوابت

کاری که من می خوام انجام بدم فکر کنم با ADo راحتتر باشه تا ADo.net
چون یه خورده هم عجله ای هست.

فقط اگه لطف کنی یه لینک یا توضیحی از این ADo تو #C بدی ممنون می شم تو Add Refrence تو Com چیزی پیدا نکردم.

با سپاس

i2ib4sunshine
23-05-2009, 11:16
فکر کنم AdoDb باید تو using و Refrence اضافه کنم فقط کار باهاشو بلد نیستم !

_H2_
23-05-2009, 23:33
سلام
برای استفاده از ado قدیمی باید مرجع زیر را اضافه کنید:
Project->Add Reference->COM->Microsoft ActiveX Data Objects 2.8/6.0 Library

متاسفانه فرصت کافی برای مطالب اموزشی ado ندارم.
در ado باید connection بسازید و جواب پرس و جوها را در recordset بگیرد و با eof و bof حواستان به خروج ان از هر دو محدوده باشد و...

برای برنامه نویسی طولانی مدت #C پیشنهاد میکنم کتابی در خصوص ado.net تهیه کنید و اصول ان را کامل یاد گرفته و به کار ببندید.
موفق باشید.

ok.baby
12-01-2013, 03:38
در غیر این صورت زوج DataAdapter و DataTable مطرح میشوند.
بعد از Fill کردن، کلیه اطلاعات در قالب یک Collection-List از خصیصه DataTable.Rows در دسترس هستند.
یعنی شما به راحتی میتوانید از Count تعداد کل سطرها را بخوانید و با دادن ایندکس به سطر مورد نظر دسترسی پیدا کنید، به راحتی دسترسی به یک آرایه !!!
جلو و عقب و پرش و... !!!



من 2 تا دکمه تو برنامه دارم که کار پیمایش رو برام انجام میدن ( بعدی و قبلی )

بار اول که فرم لود میشه، اطلاعات سطر اول datatable ، توی لیبل های موجود تو فرم ریخته میشه و نمایش داده میشه...

بعدش با کلیک روی دکمه بعدی، میخوام اطلاعات سطر بعدی رو بریزم توی lable ها... اما با کلیک روی این دکمه برنامه هیچکار نمیکنه ، ارور هم نمیده :n29: کجای کار مشکل داره؟ :n03:
اینم کدی که برای ریختن اطلاعات توی لیبل استفاده میکنم :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
18-01-2013, 13:18
سلام
شما در کدتان همواره سطر صفر و یک فیلد خاص را خوانده اید، خیلی بدیهی است که ناوبری ندارید...
برنامه از کجا بفهمد شما چه سطری را میخواهید نمایش دهید؟ قبلی؟ بعدی؟ 10 سطر جلوتر؟؟؟؟
مثلاً باید یک عدد int را در سطح کلاس نگاه دارید که موقعیت سطر جاری را پس از کم و زیاد حفظ کند.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تازه در نهایت باید حواستان باشد از محدوده تعداد سطرها خارج نشوید.

پیشنهاد:
شما یک BindingSource روی فرم تان قرار دهید و آن را به DataTable پرشده تان وصل کنید.
سپس اجرای فرم را (از همان مد طراحی) bind کنید به bindingsource.
(اینطوری حتی به کد یک خطی فوق هم نیازی نخواهید داشت)

آنگاه bindingsource خود خصیصه Position و حتی MoveNext و امثال این را دارد.
هم کد کمتری مینویسید و هم کدتان قابل اعتمادتر خواهد بود.
موفق باشید.