PDA

View Full Version : مشکل استفاده از دستور like برای جستجو



ehsan2007
جمعه 27 مهر 1386, 21:01 عصر
من میخوام یک فرد توی دو تا textbox ایمیل و پسورد خودشو وارد کنه بعد سرور توی دیتابیس بره جستجو کنه که چنین ایمیل و پسوردی هست ودرسته اگه بود فیلدهای دیگه اون جدولو توی دیتابیس بخونه و برگردونه که نشونش بدم برای تغییرات واگه نبود یه چیزه دیگه برگردونه حالا نمیدونم کدی sql رو چطوری بنویسم

select [email] , [pas] from box

تا اینجاشو یاد دارم اگه لطف کنید بگید چیکار کنم یا یک مثال بزنید ممنون میشم
بعد boxچی بنویسم واگه پیدا کرد چی برمیگردونه لطفا کمکم کنید

hamed_bostan
شنبه 28 مهر 1386, 01:08 صبح
دوست من این یه select ساده است با مراجعه به bol میتونستی راحت نمونه هاشو پیدا کنی :


select * from TableName where USR_NM=@USR_NM and USR_PSWD=@USR_PSWD
و اگر پارامتری نبود
select * from TableName where USR_NM='alireza' and USR_PSWD='123456'

sama01
شنبه 28 مهر 1386, 01:23 صبح
برای این کار، شما اصلا نباید از LIKE استفاده کنید. از LIKE وقتی استفاده می‌شه که مثلا به دنبال متونی هستیم که شامل کلمه یا عبارت خاصی باشند. ولی شما دقیقا با خود عبارت سر و کار دارید. یعنی ایمیل و پسورد نوشته شده باید دقیقا با ایمیل و پسورد‌های موجود در dataBase مقایسه بشن.
من پیشنهاد می‌کنم از این sql استفاده کنید.

SELECT * FROM Table WHERE (username=@username) OR (pass=@pass)حتما با OR. بدین ترتیب اگر هر یک از دو آیتم ایمیل با پسورد در db قبلا ثبت شده باشند، انتخاب می‌شود. در نهایت فقط کافی است که بررسی کنید چند فیلد از پایگاه داده گزینش شده است که طبعا اگر بیش از صفر باشد، باید پیام خطا صادر شود.
در ضمن چرا باید پسورد هم منحصر به فرد باشد؟ معمولا تنها نام کاربری و ایمیل باید منحصر به فرد باشند.

ehsan2007
شنبه 28 مهر 1386, 11:35 صبح
از دوستان عزیز در مورد هر دو پست بالا ممنونم راهنمایی خوبی کردید

ولی چطوری برسی کنم که چند تا فیلد از پایگاه داده گزینش شده
و در مورد این @ username یک توضیح مختصری بدید

ehsan2007
دوشنبه 30 مهر 1386, 10:17 صبح
چه شکلی میشه بررسی کرد که cmd چند تا فیلدو گزینش کرده


OleDbCommand Cmd = newOleDbCommand("SELECT* FROM boxWHERE (username=@username) OR (pass=@pass)", Cnn);

ClaimAlireza
دوشنبه 30 مهر 1386, 10:25 صبح
شما از تابع count توی query استفاده کن، بعد چک کن اگه مقدار برگردانده شده صفر نیست پیغام خطا بده.

ehsan2007
دوشنبه 30 مهر 1386, 11:03 صبح
میشه بیشتر توضیح بدید من تازه با c# برنامه مینویسم query چیه
من به جای اینکه تو دیتابیس جستجو کنم روی سرور جستجو میکنم ولی توی همین تالار خوندم سرعتو میاره پایین
اینم کدشه

privateint serch(string DataToInsert)
{
string[] arrClientValues = DataToInsert.Split("|".ToCharArray());
string ClientIPAdress = "";
ClientIPAdress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (ClientIPAdress == null)
{
ClientIPAdress = Request.ServerVariables["REMOTE_ADDR"];
}
OleDbConnection Cnn = newOleDbConnection("provider=microsoft.jet.oledb.4.0;Data Source=" + Server.MapPath("xml/box.mdb"));
OleDbCommand Cmd = newOleDbCommand("SELECT [email], [link], [ip] FROM box", Cnn);
OleDbDataReader DR = null;
Cmd.Connection.Open();
DR = Cmd.ExecuteReader();
while (DR.Read())
{
if (DR["email"].ToString() == arrClientValues[1].ToString() || DR["link"].ToString() == arrClientValues[0].ToString() || DR["ip"].ToString() == ClientIPAdress) { Cnn.Close(); return 0; }
}
Cnn.Close();
return 1;
}

اگه پیدا کرد صفرو بر میگردونه اگه پیدا نکرد 1 بر میگردونه کد هم کامل کار میکنه حالا اگه لطف کنید جستجورو کامل به وسیله دیتابیس با دستورات sql توضیح بدید ممنون میشم

ClaimAlireza
دوشنبه 30 مهر 1386, 12:10 عصر
من به جای اینکه تو دیتابیس جستجو کنم روی سرور جستجو میکنم

یعنی چی؟
میشه واضح تر بگی.
شما الان داری رو DB سرچ میکنی دیگه!!!

احتمالا منظورتون استفاده از storedProcedure به جای کد مستقیم نیست.

ehsan2007
دوشنبه 30 مهر 1386, 17:42 عصر
من یک تابع نوشتم که به جای اینیکه توی دیتابیس اکسس با فرمان sql جستجو بشه من خودم به وسیله یک OleDbDataReader DR = null تمامی فیلدهارو دونه دونه میخونه تا پیدا کنه اگه پیدا کرد همون لحظه 0 بر میگردونه اگه نکرد 1 رو بر میگردونه

sama01
سه شنبه 01 آبان 1386, 02:25 صبح
نمونه‌ی ساده دستور Count در sql:


SELECT Count(*) FROM TableName

برای این کار شما هم فکر می‌کنم این کد مناسب باشه:


SELECT Count(*) FROM Table WHERE (username=@username) OR (pass=@pass)