PDA

View Full Version : یک DataAdapter برای همه Queryها



روح اله معینی زاده
دوشنبه 02 آذر 1383, 10:22 صبح
با سلام خدمت دوستان گرامی

چگونه می توان یک Data Adapter داشت و با تغییر commandtext مربوط به قسمت Select آن، در دفعات مختلف گزارش های مختلفی گرفت و از آن ها هم در برنامه استفاده کرد؟ :sad2:

روشن کردن مطلب: :reading:
من یک Data Grid دارم که به دو جدول از بانک اطلاعاتی می خواهم متصل بشه. وقتی کاربر کلید اول را کلیک کرد باید از جدول اول گزارش بده و وقتی کلید دوم، جدول دوم.
این را هم می دانیم که هر جدول ستون‌های متفاوتی با جدول دیگر دارد.

من این کار را انجام دادم، یعنی خاصیت CommandText مربوط به Select از Data Adapter را در کد برنامه تنظیم کردم و گزارش گرفتم و DataSet را پر کردم. در این مرحله دو مشکل داشتم
1- جدولی به نام جدول دوم در DataSet وجود نداشت که من DataSource گرید خود را به آن ارجاع دهم
2- اگر به جدول اول که در DataSet وجود دارد هم اشاره کنم (DataSource مربوط به گرید) هم فیلدهای جدول اول را نشان خواهد داد و هم فیلدهایی که جدول دوم.

امیدوارم ملتفت شده باشید.

خلاصه اینکه چون توی فرم من یک Tab page وجود دارد و هر صفحه آن می خواهد به یک قسمت از بانک اطلاعاتی وصل شود، چگونه می توانم یک Data Adapter و یک DataSet داشته باشم و با آن برای همه صفحه‌های Tab page بسته به نوع صفحه گزارش جدایی تهیه کنم.

یادآور شوم که وقتی در کد برنامه وصل شدن به جدولی از DataSet را که در آینده قرار است در حین اجرا درست شود را قید می کنیم، با اجرای برنامه با خطا مواجه می شویم (خود سیستم هم زیر آن را خط زیگزاگ می کشد که یعنی این شی وجود ندارد)

با احترام- خدانگهدار

Farhad.B.S
دوشنبه 02 آذر 1383, 14:01 عصر
فکر میکنم مشکل شما ناشی از صدا نزدن متد Clear مربوط به دیتاست قبل از پر کردن مجدد دیتاست است.


dbAdapter.SelectCommand = dbCommand

'getting query1 result
dbCommand.CommandText = "SELECT * FROM Table1"
dbAdapter.Fill(dbDataset)


'getting query2 result
dbDataset.Clear()
dbCommand.CommandText = "SELECT * FROM Table2"
dbAdapter.Fill(dbDataset)

در کد بالا پس از هر مرحله پر کردن دیتاست میتونید اون رو به دیتاگرید متصل کنید.
(با استفاده از این روش ، داخل دیتاست تنها یک جدول ایجاد میشه)

در صورتی که بخواید هر دو جدول رو به داخل دیتاست بیارید ،باید هر دو کوئری
رو با هم اجرا کنید :


dbAdapter.SelectCommand = dbCommand
dbCommand.CommandText = "SELECT * FROM Table1" & vbCrLf & "SELECT * FROM Table2"
dbAdapter.Fill(dbDataset)

با استفاده از کد فوق ، هر دو جدول داخل دیتاست قرار میگیرند که میتونید با
استفاده از ایندکس جدول مورد نظر ، اون رو به دیتاسورس گرید متصل کنید.

مثلا

DataGrid1.DataSource = dbDataset.Tables(0)