PDA

View Full Version : سوال: بالا بردن سرعت بایند اطلاعات دیتابیس access در DataGridView



barman.ar16
شنبه 15 اردیبهشت 1397, 11:20 صبح
دوستان من یک برنامه سی شارپی قدیمی دارم که با دیتابیس اکسس نوشته شده
دیتابیس هم روی سرور هست الان میخوام یه خورده سرعت برنامه رو بهینه کنم

توی دستورات insert و update اومدم از transaction استفاده کردم سرعت خیلی خیلی تغییر کرد(در واقع از این رو به اون رو شد) اما برای بایند کردن اطلاعات درون دیتاگرید ویو هر چی جستجو می کنم روش بهینه تری پیدا نمی کنم
در حال حاضر من از تکه کد زیر استفاده می کنم :


OleDbCommand OleDbCommand1 = new OleDbCommand();
OleDbCommand1.CommandType = CommandType.Text;
OleDbCommand1.CommandText = "SELECT * FROM my_table";
OleDbCommand1.Connection = con;
OleDbDataAdapter adapter = new OleDbDataAdapter(OleDbCommand1);
DataSet DataSet1 = new DataSet();
adapter.Fill(DataSet1, "my_table");
datagridview.DataSource = DataSet1.Tables["my_table"];


دوستان اگر کوئری بهینه تری به ذهن تون میرسه ممنون میشم راهنمایی کنید
متشکرم

Mahmoud Zaad
شنبه 15 اردیبهشت 1397, 11:48 صبح
سلام
شما وقتی از دیتا آداپتر استفاده می کنید دیگه نیازی به کامند و ... نیست ضمنا وقتی با یه تیبل کار می کنید از همون ابتدا برید سراغ دیتاتیبل. کلا 4 خط:
OleDbDataAdapter adapter = new OleDbDataAdapter("select * from table", con);

DataTable dt = new DataTable();

adapter.Fill(dt);

datagridview.DataSource = dt;

برای نمایش هم می تونید گرید رو صفحه بندی کنید و در هر صفحه نهایتا 100 یا اگه مجبور شدید نهایتا 200 رکورد رو نمایش بدید.

Shadow_net
شنبه 15 اردیبهشت 1397, 11:55 صبح
سلام
شما وقتی از دیتا آداپتر استفاده می کنید دیگه نیازی به کامند و ... نیست ضمنا وقتی با یه تیبل کار می کنید از همون ابتدا برید سراغ دیتاتیبل. کلا 4 خط:
OleDbDataAdapter adapter = new OleDbDataAdapter(OleDbCommand1, con);

DataTable dt = new DataTable();

adapter.Fill(dt);

datagridview.DataSource = dt;

برای نمایش هم می تونید گرید رو صفحه بندی کنید و در هر صفحه نهایتا 100 یا اگه مجبور شدید نهایتا 200 رکورد رو نمایش بدید.
سلام
آیا سورسی از صفحه بندی دارید که اطلاعات رو یکدفه لود نکنه؟
من اطلاعات خیلی زیادی در بانک دارم و چند سورس صفحه بندی دانلود کردم ولی همشون ابتدا کل دیتابیس رو Load میکردند، بعد از لود صفحه بندی میکردند که بدرد نمیخوره
اگر سورسی دارید ممنون میشم قرار بدید

Mahmoud Zaad
شنبه 15 اردیبهشت 1397, 12:00 عصر
این نمونه (https://www.codeproject.com/Articles/211551/A-Simple-way-for-Paging-in-DataGridView-in-WinForm) رو نگاه کنید.

barman.ar16
شنبه 15 اردیبهشت 1397, 12:13 عصر
سلام
شما وقتی از دیتا آداپتر استفاده می کنید دیگه نیازی به کامند و ... نیست ضمنا وقتی با یه تیبل کار می کنید از همون ابتدا برید سراغ دیتاتیبل. کلا 4 خط:
OleDbDataAdapter adapter = new OleDbDataAdapter("select * from table", con);

DataTable dt = new DataTable();

adapter.Fill(dt);

datagridview.DataSource = dt;

برای نمایش هم می تونید گرید رو صفحه بندی کنید و در هر صفحه نهایتا 100 یا اگه مجبور شدید نهایتا 200 رکورد رو نمایش بدید.


ممنون
خب اگر از commond استفاده نکنم پس دستور select رو کجا بنویسم

ویرایش :

چه جالب پست شما رو نقل قول کردم یه چیز دیگه نمایش داده شد
ممنون تست می کنم ببینم مشکل حل میشه یا نه

در کل من تعداد رکوردهام اصلا زیاد نیست ولی از اونجایی که دیتابیس روی شبکه هست یه خورده زمان میبره تا اتصال برقرا بشه
البته این حدس من هست فکر کنم مشکل از کانکشن استرینگ هم نیست چون برای هر دو یعنی هم سلکت هم اینسرت و آپدیت از یک کانکسن استفاده می کنم
به نظر مربوط به کوئری هست

Shadow_net
شنبه 15 اردیبهشت 1397, 12:41 عصر
این نمونه (https://www.codeproject.com/Articles/211551/A-Simple-way-for-Paging-in-DataGridView-in-WinForm) رو نگاه کنید.
متاسفانه کارساز نبود

Mahmoud Zaad
شنبه 15 اردیبهشت 1397, 12:51 عصر
ممنون
خب اگر از commond استفاده نکنم پس دستور select رو کجا بنویسم

ویرایش :

چه جالب پست شما رو نقل قول کردم یه چیز دیگه نمایش داده شد
ممنون تست می کنم ببینم مشکل حل میشه یا نه

در کل من تعداد رکوردهام اصلا زیاد نیست ولی از اونجایی که دیتابیس روی شبکه هست یه خورده زمان میبره تا اتصال برقرا بشه
البته این حدس من هست فکر کنم مشکل از کانکشن استرینگ هم نیست چون برای هر دو یعنی هم سلکت هم اینسرت و آپدیت از یک کانکسن استفاده می کنم
به نظر مربوط به کوئری هست
درسته پست رو ویرایش کردم.
اکسس روی شبکه مشکل داره ولی نه اینقدر.

حجم دیتابیس چقدره؟ اکسس در تب Database Tools یه گزینه ای داره به اسم Compact AND Repaire Database، می تونید با زدن اون آبجکت های اضافی داخل دیتابیس رو حذف کنید و حجم رو کاهش بدید، شاید روی سرعت موثر باشه.

تعداد فیلدهای جدول چندتاست؟ اگر تعداد فیلدها زیاده می تونید فقط فیلدهای مورد نیاز رو سلکت کنید.

Mahmoud Zaad
شنبه 15 اردیبهشت 1397, 12:53 عصر
متاسفانه کارساز نبود

یعنی اجرا نشد یا مشکل دیگه ای وجود داره؟

Shadow_net
شنبه 15 اردیبهشت 1397, 13:05 عصر
یعنی اجرا نشد یا مشکل دیگه ای وجود داره؟
اجرا شد ولی اگر سورس رو نگاه کنید توی FormLoad اول اومده کلش رو Load کرده بعد دسته بندی کرده...
تقریباً همه سورس ها همین کارو میکنن

Mahmoud Zaad
شنبه 15 اردیبهشت 1397, 14:20 عصر
اون اشتباه کرده، برای اینکه تعداد کل رکوردهای دیتابیس و تعداد صفحات رو محاسبه کنه اینکار رو کرده. شما به جای اون کار، در لود فرم یه سلکت بزنید و تعداد کل رکوردها رو به دست بیارید و ادامه کار مثل همونه. یه مقدار تغییر جزیی شاید نیاز باشه.

محاسبه تعداد رکوردها
select count(*) from tbl