PDA

View Full Version : سوال: سریعترین روش برای جستجو بین 50هزار رکورد در excel



vb-sosol
شنبه 06 اردیبهشت 1393, 22:31 عصر
سلام
سوالم در عنوان مشخص هست
50هزار تا رکورد توی اکسل دارم وقتی میخوام جستجو کنم خیلی طول میکشه و برنامه هنگ میکنه
چکار کنم؟ :متفکر:

سوداگر
یک شنبه 07 اردیبهشت 1393, 08:14 صبح
اینجا یه نمونه کد داره:

خواندن سریع (http://www.dotnettips.info/post/1704/%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D8%B3%D8%B1%DB%8C%D8%B9-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D9%81%D8%A7%DB%8C%D9%84-%D8%A7%DA%A9%D8%B3%D9%84-%D9%88-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%AF%D8%B1-%D8%A8%D8%A7%D9%86%DA%A9-sql)
ذخیره سریع (http://www.dotnettips.info/post/1701/%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%B3%D8%B1%DB%8C%D8%B9-%D8%AF%D9%87%E2%80%8C%D9%87%D8%A7-%D9%87%D8%B2%D8%A7%D8%B1-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D8%AF%DB%8C%D8%AA%D8%A7%D8%AA%DB%8C%D8%A8%D9%84-%D8%AF%D8%B1-%D8%A7%DA%A9%D8%B3%D9%84)

vb-sosol
یک شنبه 07 اردیبهشت 1393, 13:34 عصر
من نمیخوام در sql ذخیره کنم
فرض کنید 50هزار رکورد هست که میخوام بر اساس کد ملی اطلاعات اشخصاص رو پیدا کنم و در یکی از فیلدها نوشته ای بنویسم
هم سرچ و هم ایجاد نوشته خیلی طول می کشه!
راهی نیست؟

behnam-soft
یک شنبه 07 اردیبهشت 1393, 13:42 عصر
چرا یه راه داره دوست من!
من یه ویدئو در این زمینه تهیه کردم :
http://barnamenevis.org/showthread.php?421564-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D9%88%DB%8C%D8%AF%D8%A6%D9%88%DB%8C-%D9%86%D8%AD%D9%88%D9%87-%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D9%88-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%A7%DA%A9%D8%B3%D9%84-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE
این ویدئو رو نگاه کن، کاری که باید انجام بدی رو کامل توضیح دادم، فقط اینکه شما چون نیازی نداری که فایلی رو ذخیره کنی، می تونی این قسمتش رو نگاه نکنی!!! ضمنا اول تمام اطلاعات فایل اکسلت رو بریز تو یه دیتا تیبل، بعد جستجو رو در دیتا تیبل انجام بده که فوق العاده سریعتره !!! همه ی این مسائل رو در ویدئو گفتم.
موفق باشی.

vb-sosol
یک شنبه 07 اردیبهشت 1393, 16:19 عصر
چرا یه راه داره دوست من!
من یه ویدئو در این زمینه تهیه کردم :
http://barnamenevis.org/showthread.php?421564-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D9%88%DB%8C%D8%AF%D8%A6%D9%88%DB%8C-%D9%86%D8%AD%D9%88%D9%87-%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D9%88-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%A7%DA%A9%D8%B3%D9%84-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE
این ویدئو رو نگاه کن، کاری که باید انجام بدی رو کامل توضیح دادم، فقط اینکه شما چون نیازی نداری که فایلی رو ذخیره کنی، می تونی این قسمتش رو نگاه نکنی!!! ضمنا اول تمام اطلاعات فایل اکسلت رو بریز تو یه دیتا تیبل، بعد جستجو رو در دیتا تیبل انجام بده که فوق العاده سریعتره !!! همه ی این مسائل رو در ویدئو گفتم.
موفق باشی.

ممنون از آموزش خوب شما
اما چند تا سوال
فایل اکسل من با پسوند .xls هست به جای این خط زیر باید چی بنویسم تا ارتباط برقرار بشه؟

var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedType s=Text\"";


حالا اطلاعات رو سرچ کردم و نمایش هم داد تا اینجا درست ؛ تغییر رو اعمال کردم و حالا دوباره میخوام بفرستمش به اکسل
اینجا میشه راهنمائی کنید که سریعترین روش ممکن اطلاعات ذخیره بشه

کدی که استفاده میکنم این است

olecom.CommandText = "UPDATE [Sheet1$] SET shomare=@shomare WHERE codemeli=@codemeli";
_olecom.Parameters.Clear();
_olecom.Parameters.Add("@codemeli", OleDbType.Integer).Value = txtcode.Text;
_olecom.Parameters.Add("@shomare", OleDbType.Integer).Value = Convert.ToInt32(txtshomare.Text);

_olecom.ExecuteNonQuery();

اما خیلی طول میکشه
بازم ممنون

سوداگر
یک شنبه 07 اردیبهشت 1393, 16:31 عصر
من نمیخوام در sql ذخیره کنم
اصل روش باز کردن فایل اکسل بود. سال گذشته یه نمونه (http://barnamenevis.org/showthread.php?336737-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-%D8%AF%D8%B1-%DB%8C%DA%A9-%D9%81%D8%A7%DB%8C%D9%84-%D8%A7%DA%A9%D8%B3%D9%84)برای خواندن فایل اکسل گذاشته بودم که میتونید متغیر strSQL رو تغییر بدین و Query مورد نظر خودتون رو بنویسید. همین الان تست کردم با 54 هزار رکورد اصلا کند نبود. روش دیگه رو هم گفته شده و از لحاظ performance روش OLEDB در مقابل استفاده از کتابخانه Microsoft.Interop.Excel بهینه تره. نمیدونم شما از چه روشی استفاده کرده اید ولی با OLEDB اصلا کند نبود

vb-sosol
یک شنبه 07 اردیبهشت 1393, 16:32 عصر
فکر کنم جواب سوال اولم این باشه درسته؟

var connectionString = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0";

behnam-soft
یک شنبه 07 اردیبهشت 1393, 16:35 عصر
خواهش می کنم وظیفه ست، در مورد سوال اول، شما دو راه داری، یا باید کانکشن استرینگت رو تغییر بدی،فکر می کنم به جای عدد 12 باید بنویسی 11 اما مطمئن نیستم تو همین تالار سرچ کنی کدش هست، یه راه دیگه ت هم اینه که ورژن فایل اکسلت رو تبدیل کنی به 2007، به نظرم راه دومی بهتر و منطقی تره، چون آفیس 2007 از آفیس 2003 بهتره !!! خودم از روش دومی استفاده می کنم.
در مورد سوال دومت هم، یه لینک برات می فرستم امیدوارم مشکلت حل بشه.

vb-sosol
یک شنبه 07 اردیبهشت 1393, 22:54 عصر
خواهش می کنم وظیفه ست، در مورد سوال اول، شما دو راه داری، یا باید کانکشن استرینگت رو تغییر بدی،فکر می کنم به جای عدد 12 باید بنویسی 11 اما مطمئن نیستم تو همین تالار سرچ کنی کدش هست، یه راه دیگه ت هم اینه که ورژن فایل اکسلت رو تبدیل کنی به 2007، به نظرم راه دومی بهتر و منطقی تره، چون آفیس 2007 از آفیس 2003 بهتره !!! خودم از روش دومی استفاده می کنم.
در مورد سوال دومت هم، یه لینک برات می فرستم امیدوارم مشکلت حل بشه.


ممنون از لینکی که فرستادی
آموزشت عالی بود
خیلی چیزها یاد گرفتیم
من تو پروژه خودم این رفرنس رو اضافه میکنم
using Microsoft.Office.Interop.Excel;

از تمام خط های که Application استفاده کرده ایراد میگیره
مثلا یکی از خط ها برای پیدا کردن آدر فایل اکسل در کنار برنامه

مشکل کجاست؟

vb-sosol
سه شنبه 09 اردیبهشت 1393, 15:26 عصر
کمک کنید لطفا :|