PDA

View Full Version : حرفه ای: ذخیره یکباره اطلاعات در بانک داده



modern_amin
دوشنبه 08 آبان 1396, 00:58 صبح
با سلام
فرض کنید دیتاگریدویو یی (یا دیتاتیبل) با هزار سطر دارم
چجوری میتونم اون رو به یکباره در بانک Access ذخیره کنم؟؟؟

رامین مرادی
دوشنبه 08 آبان 1396, 08:14 صبح
یه روشش اینه که سطرها رو پیمایش کنید.و یه دستور اس کیو الی بسازید که هزار تا اینسرت توش باشه. (البته باید ببیند متغییر رشته ای این حجم توش جا میشه یا نه.) و به یکباره یک کامند اجرا کنید که حاوی دستور اس کیو ال باشه.
یا اینکه یه حلقه ایجاد کنی و داخل حلقه همون سطر رو بخونی و اینسرت کنی و تا اخر حلقه همین روش رو ادامه بدی

modern_amin
سه شنبه 09 آبان 1396, 13:36 عصر
یه روشش اینه که سطرها رو پیمایش کنید.و یه دستور اس کیو الی بسازید که هزار تا اینسرت توش باشه. (البته باید ببیند متغییر رشته ای این حجم توش جا میشه یا نه.) و به یکباره یک کامند اجرا کنید که حاوی دستور اس کیو ال باشه.
یا اینکه یه حلقه ایجاد کنی و داخل حلقه همون سطر رو بخونی و اینسرت کنی و تا اخر حلقه همین روش رو ادامه بدی

ایده اولیت بهتر بود...


روش های دیگه ای هم بنظرم باشه ْ مثلا بنظرم با ویو گرفتن هم بشه اما وارد نیستم نحوه پیاده سازیش رو (مخصوصا تو access)


دوستان کسی هست کمک کنه؟

mz6488
سه شنبه 09 آبان 1396, 13:52 عصر
سلام.متاسفانه دیتابیس اکسس قابلیت اجرای همزمان دستورات رو نداره و برای درج ردیف گروهی باید دستورات رو تو حلقه بذارید.میتونید به جاش از دیتابیس sqlite استفاده کنید که کاملا بی دردسر،سبک و قابل حمله

modern_amin
سه شنبه 09 آبان 1396, 14:13 عصر
سلام.متاسفانه دیتابیس اکسس قابلیت اجرای همزمان دستورات رو نداره و برای درج ردیف گروهی باید دستورات رو تو حلقه بذارید.میتونید به جاش از دیتابیس sqlite استفاده کنید که کاملا بی دردسر،سبک و قابل حمله


سلام و تشکر از شما
امکان استفاده از sqlite فعلا ندارم چون همه بخش های برنامه کاملا انجام شده (فقط در بخشی مشکل بالا رو دارم و طول میکشه)

بله متاسفانه دو کوئری همزمان جواب نداد

مطمئتم راهی هست . من هزار سطر (که هر سطر 100 ستون داره ) رو حدود دوقیقه ذخیره میکنم در access
اما قبلا جایی دیدم شخصی اینکار رو تو ده ثانیه کرده بود

modern_amin
سه شنبه 09 آبان 1396, 14:17 عصر
تو ذهنم بود حتی خروجی xml بگیرم بعد اونو apend کنم تو access
یا راههای شبیه به این

Mahmoud Zaad
سه شنبه 09 آبان 1396, 14:43 عصر
سلام
کدهاتون رو بفرستید.

modern_amin
سه شنبه 09 آبان 1396, 14:55 عصر
سلام
کدهاتون رو بفرستید.

سلام
کد خاصی ننوشتم هنوز
نمیدونم از کدوم طریق بایست شروع کنم که بتونم به یکباره ذخیره کنم

Mahmoud Zaad
سه شنبه 09 آبان 1396, 14:58 عصر
همون کدی که می فرمایید تو 2 دقیقه ذخیره می کنه رو عرض کردم.

modern_amin
سه شنبه 09 آبان 1396, 15:05 عصر
همون کدی که می فرمایید تو 2 دقیقه ذخیره می کنه رو عرض کردم.

یک حلقه و پیمایش ساده از دیتاگرید ویو هست
و بصورت تکی وارد میکنه هرسطر رو:ناراحت:

Mahmoud Zaad
سه شنبه 09 آبان 1396, 15:12 عصر
خب ظاهراً نمی خواید کدها رو بفرستید:لبخند:، مشکلی نیست. مهمترین نکته ای که وجود داره اینه که تمام موارد مشترک بویژه تعریف کانکشن و باز و بسته کردنش خارج از حلقه باشد. تعریف کامند هم باید خارج حلقه باشد فقط پارامترها داخل حلقه مقدار دهی میشه. البته داخل حلقه باید پارامترها رو هم پاک کنید (cmd.Parameters.Clear()).

modern_amin
سه شنبه 09 آبان 1396, 15:16 عصر
خب ظاهراً نمی خواید کدها رو بفرستید:لبخند:، مشکلی نیست. مهمترین نکته ای که وجود داره اینه که تمام موارد مشترک بویژه تعریف کانکشن و باز و بسته کردنش خارج از حلقه باشد. تعریف کامند هم باید خارج حلقه باشد فقط پارامترها داخل حلقه مقدار دهی میشه. البته داخل حلقه باید پارامترها رو هم پاک کنید (cmd.Parameters.Clear()).

نه بابا اخه چیز ساده ای بود

بله رعایت شده

Mahmoud Zaad
سه شنبه 09 آبان 1396, 15:25 عصر
من قبلاً تعداد بالای سطر رو توی یه فیلد ذخیره کردم به اینصورت که دیتاتیبل رو تبدیل به متن کردم و همش رو توی یه فیلد ذخیره کردم و سرعت هم مثل یه ذخیره ی ساده بود ولی نمی دونم نیاز شما چی هست.
این پست (https://stackoverflow.com/questions/7070011/writing-large-number-of-records-bulk-insert-to-access-in-net-c) رو نگاه کنید ببینید جواب می گیرید.

modern_amin
سه شنبه 09 آبان 1396, 19:22 عصر
من قبلاً تعداد بالای سطر رو توی یه فیلد ذخیره کردم به اینصورت که دیتاتیبل رو تبدیل به متن کردم و همش رو توی یه فیلد ذخیره کردم و سرعت هم مثل یه ذخیره ی ساده بود ولی نمی دونم نیاز شما چی هست.
این پست (https://stackoverflow.com/questions/7070011/writing-large-number-of-records-bulk-insert-to-access-in-net-c) رو نگاه کنید ببینید جواب می گیرید.

من دیتاگریدویویی با 1000 سطر و 100 ستون دارم
حلقه گذاشتم و سطر به سطر در دیتابیس ACCESS (mdb) ذخیره کردم
این روش من باعث میشه مثلا دستور insert من 1000 بار تکرار بشه و 2دقیقه زمان هدر بره

من دنبال اینم این 2 دقیقه تبدیل بشه به نهایتا 10 ثانیه


ممنونم از شما ... شاید این روش جواب بده و سرعت رو بالاتر ببره ....
آیا از کدی که نشون دادید sample دارید ؟

Mahmoud Zaad
سه شنبه 09 آبان 1396, 19:56 عصر
1000 رکورد چیز خاصی نیست، اگه اطلاعات رو می تونید بفرستید تا تست کنیم.
متاسفانه الان کدش رو ندارم.