PDA

View Full Version : بررسی کد جستجو داده



MahmoodM30
چهارشنبه 14 مهر 1395, 21:08 عصر
سلام به دوستان من یسری اطلاعات تو دیتابیس اس کیو ال دارم و میخوام فیلد کد ملی رو تو یه دیتابیس دیگه که اکسس هست جستجو کنم و اگه پیدا شد تو لیست باکس برام نمایش بده کدی که من نوشتم مشکلی نداره و کار رو انجام میده ولی میخوام بهینه تر و با سرعت بیشتری انجامش بدم

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

OleDbConnection cone = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileNameLoad);
OleDbCommand cme = new OleDbCommand();
DataTable Table = new DataTable();

string SQLView = "Select CodeMeli from TBLData WHERE Tarkhis = N'" + "خیر" + "'";
Program.con.Open();
SqlCommand cmd3 = new SqlCommand(SQLView, Program.con);
cmd3.ExecuteNonQuery();
Program.dr = cmd3.ExecuteReader();
while (Program.dr.Read())
{
cme.CommandText = "Select NationalCode From ConscriptInfo where NationalCode = '" + Program.dr[0].ToString() + "'";
cme.Connection = cone;
cone.Open();
OleDbDataReader dr = cme.ExecuteReader();
while (dr.Read())
{
string codemelit = dr["NationalCode"].ToString();
listBox1.Items.Add(codemelit);
}
cone.Close();
}
Program.con.Close();

khorsandreza
جمعه 16 مهر 1395, 20:01 عصر
سلام در مورد دستورات اس کیول سرور (OpenRowSet) تحقیق کنید
شما با استفاده از این دستور میتوانید جدول اکسس را باز کنید و مثل جداول اس کیو ال سرور جستجو کنید



select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'E:\Acc\YourDBName.mdb';'admin';'', "AccessTBName")
میتوانید شرط ها در ادامه بنویسید

توجه داشته باشید باید دسترسی را به اکسس فعال کنید معمولا سرورها تحت وب این دسترسی را می بندند در وضعیت لوکال از ازدستور زیر استفاده کنید


exec sp_configure 'Show Advanced Options', 1;
RECONFIGURE;
exec sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1

MahmoodM30
شنبه 17 مهر 1395, 21:44 عصر
یک سوال دیگه داشتم دوستان ممنون میشم راهنمایی بکنید

می خواستم ببینم توی کوئری نوشته شده هرچی بازه جستجو محدودتر بشه سرعت توی فراخوانی داده ها زیاد میشه یا نه؟
مثلا من میخوام یک اسم رو بین 5 میلیون اسم جستجو کنم و میام کوئری رو به شکل زیر مینویسم

SELECT TOP(10) MLName FROM TBLData WHERE MLName LIKE N'%" + txtProS1.Text + "%'"

این میاد جستجو رو محدود به 10 تای آخر شبیه به کلمه موردنظر من رو فراخوانی میکنه ایا برای این میزان داده بهینه هست یا خیر؟
و اما اگه من بیام این کد رو محدودتر بکنم و به شکل زیر بنویسم

SELECT TOP(10) MLName FROM TBLData WHERE MLName LIKE N'%" + txtProS1.Text + "%' AND Tarkhis = 'No'"

این کد میاد از بین اونایی جستجو میکنه که ترخیص نشده اند و ترخیص نشده ها تعدادشون میشه مثلا 1000 نفر از 5 میلیون میخوام ببینم این روش بهینه هست و مشکلی رو با افزایشداده ها ایجاد نمیکنه؟

MahmoodM30
شنبه 17 مهر 1395, 21:49 عصر
در کل بازه جستجو رو هر چی محدودتر کنم سرعت میره بالا یا نه؟ و همون عمل جستجو بین کل داده ها صورت میگیره یا نه؟

khorsandreza
یک شنبه 18 مهر 1395, 16:53 عصر
در کل بازه جستجو رو هر چی محدودتر کنم سرعت میره بالا یا نه؟ و همون عمل جستجو بین کل داده ها صورت میگیره یا نه؟

بهتره بر روی فیلدی که جستجو انجام می دی اندیکس گذاری کنی تا سرعت بالا بره ولی برای اینکه بهتر جواب بگیری از قابلیت FullText استفاده کنید سرعت مطلوبی دارد .
یشنهاد می کنم به سایت نیک اموز هم سری بزنید مطالب و مثال و فیلم های نسبتا خوبی دارد .

MahmoodM30
دوشنبه 19 مهر 1395, 15:49 عصر
ممنون میشم در مورد تاپیک سوم هم جوابی بدن وستان و من رو راهنمایی کنن