PDA

View Full Version : سوال: نحوه ذخیره کردن تعداد زیاد رکوردها در یک جدول



pbm_soy
چهارشنبه 19 آبان 1389, 15:32 عصر
سلام
چطور می تونم تعداد زیادی از رکوردها را در یک جدول بیکیاره ذخیره کنم بدون اینکه سیستم هنگ کند؟
نمونه ای که خودم نوشتم این مشکل را دارد تعداد رکوردها حداقل 100 هزار تا است و فقط یک فیلد دارد اونهم از نوع رشته است
در کد زیر یک فایل متنی باز می شود و محتویات در یک تکیت باکس ریخته شده و خطوط آن در جدول ریخته می شود



openFileDialog1.ShowDialog();
String fn = openFileDialog1.FileName;
if (fn.Length == 0) return;
StreamReader fsr = new StreamReader(fn);
textBox1.Text = fsr.ReadToEnd();

dbcon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\mail.mdb";
dbcon.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.Connection = dbcon;
foreach(String s in textBox1.Lines )
{
cmd.CommandText = "insert into [emails]([email],[gname]) values('" + s +"','NoGroup');"
cmd.ExecuteNonQuery();
}
MessageBox.Show("saved complete.");




البته یک فکر دیگه هم دارم که insert ها را بصورت چند رکورد , چند رکورد انجام دهم ولی نمی دونم شاید باز این مشکل پیش بیاد آزمایش نکردم

در ضمن یک مشکل دیگه هم که دارم کندی نمایش رکوردها در grid می باشد می توانید الگوریتمی برای نمایش بصورت pageing پیشنهاد کنید

ایمان مدائنی
چهارشنبه 19 آبان 1389, 15:41 عصر
ميتوني بريزي داخل يك DataSet و به يكباره بريزي داخل بانك

pbm_soy
جمعه 21 آبان 1389, 01:44 صبح
برای نمایش دادن تعداد رکوردهای زیاد سعی کردم dataset ویا datatable را در یک grid نمایش دهم ولی خیلی کند عمل کردند !!! چون زمان fill شدن و زمان ست شدن برای datassource هردو طولانی است
ولی زمان ست شدن dataview به datasource یک گرید به مراتب سریعتر از دو نوع بالایی است ولی در هرصورت برای بدست آوردن یک dataView بایستی از DataTable و یا DataSet استفاده کنم!!!
زمان Fill شدن یک Dataset و یا DataTable زیاد است ولی زمان ست شدن یک DataReader توسط دستور ExecuteReader() خیلی خیلی کم است (بواسطه ساختار ساده و کاربرد آن ) برای همین سعی کردم از DataReader استفاده کنم ولی مشکل زیر بوجود آمد!!!
چگونه می توان یک datareader به یک datagridview ارتباط داد سعی کردم با دستور زیر اینکار رو انجام بدم ولی نه خطایی داد نه رکوردی در grid نمایش داد!!!
dataGridView2.DataSource = cmd.ExecuteReader();
البته این کار رو با اضافه کردن رکورد به رکورد به گرید انجام دادم(با استفاده از حلقه while) که در این حالت سرعت بهتر از حالت استفاده کردن از dataset ویا datatable بود !!!

لطفا راهنمایی کنید

pbm_soy
شنبه 22 آبان 1389, 15:46 عصر
سلام

کسی نمی تونه کمک کنه ؟؟!
می خوام یه Datareader رو در یه DataGridView نمایش بدم

pbm_soy
شنبه 22 آبان 1389, 15:56 عصر
سلام

iman_lovely666 عزیز می تونید در مورد اینکه چطوری می تونم چند رکورد رو در دیتا ست بریزم و سپس یکدفعه بریزم داخل بانک کمک کنید

ایمان مدائنی
شنبه 22 آبان 1389, 16:20 عصر
بايد اطلاعات را به ديتاست FILL كني
منظورمو متوجه شديد ؟
مثلا


DS.FILL(DT);

منظورم از DT ديتا تيبل بود
اين يك مثال بود

pbm_soy
شنبه 28 اسفند 1389, 20:32 عصر
فکر نمی کنید این روش کندتر باشد ؟؟؟؟!

چون اول از همه فایل text رو یاید بریزم تو دیتا تیبل و بعد اونو فیل کنم تو دیتا ست و بعد دیتا ست رو بریزم تو دیتابیس ؟؟؟

asif1358
شنبه 28 اسفند 1389, 23:45 عصر
دوست عزیز
همان گونه که شما می گویید DataReader خیلی سبک تر و سریع تر از DataAdapter و دیتاست است؛ اما برای نمایش نتیجه کار باید ابتدا آن را تبدیل به List<String> کنید.
ضمنا متد ExecuteReader خودش یه DataReader بر می گردانه که نمیشه تو دیتاگریدویو نشان داد!