PDA

View Full Version : سوال: شرط گداشتن برای دستور sql



aliramazani
شنبه 14 خرداد 1390, 15:21 عصر
به کد زیر نگاه کنید: string strsql; strsql = "SELECT * FROM users" این کد فیلدهای جدول users را فراخوانی می کنه. چطوری میشه توی سی شارپ یه شرط مثل این گذاشت؟ اگر مثلا این جدول یک فیلد داشته باشه به نام username شرط : اگر فیلد username برابر با مقدار Ali بود دستورات را اجرا کن! چیزی شبه این میشه نوشت؟ توی دستور if چی باید بنویسم؟

aliramazani
شنبه 14 خرداد 1390, 15:23 عصر
از where نمی خوام استفاده کنما.

اگر مسئله شرط را فراموش کنیم می خوام اطلاعات فیلد username را برگردونم و با یه چیزی مقایسه کنم.

aliramazani
شنبه 14 خرداد 1390, 16:02 عصر
کسی راهنمایی نمی کنه؟

Reza_Yarahmadi
شنبه 14 خرداد 1390, 17:35 عصر
سوالتون اصلا واضح نيست!!
اگر ميخوايد در صورت وجود يوزري با نام Ali توي برنامه كار خاصي انجام بشه بصورت زير عمل كنيد
SqlCommand cmd = new SqlCommand("Select * From Users Where UserName = @UserName", con);
cmd.Parameters.AddWithValue("@UserName", "Ali");
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if(dr.Read())
{
//Do Somethings
}
con.Close();
و يا
SqlCommand cmd = new SqlCommand("Select * From Users", con);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while(dr.Read() && dr["UserName"].ToString() == "Ali")
{
//Do Somethings
break;
}
con.Close();
اگر هم ميخوايد توي دستور SQL‌ در صورت وجود يوزر كاري انجام داده بشه
IF EXISTS(Select 1 From Users Where UserName = 'Ali')
Begin
--Do Somethings
End
در صورتي كه چيز ديگه اي مد نظرتونه بيشتر توضيح بديد تا بهتر بشه كمكتون كرد.
(كدها رو توي notepad نوشتم ممكنه جايي اشتباه نوشتاري داشته باشه.)

aliramazani
شنبه 14 خرداد 1390, 20:12 عصر
می خوام یه شرط باشه که بیاد بررسی کنه اگر یوزرنیم درست بود و فیلد دیگری به نام role برابر با مقدار admin بود فرم 1 باز بشه و اگر باز یوزرنیم درست بود ولی فیلد role برابر با مقدار user بود فرم 2 باز بشه و اگر یوزرنیم باز هم درست بود ولی فیلد role برابر با مثلا Register بود فرم 3 باز بشه. و اگر یورنیم درست نبود سراغ بررسی فیلد role نره و پیغام خطا بده.

مشکل من سر بررسی فیلد role هستش. یعنی چطوری می تونم اون دو شرط را با هم داشته باشم؟ که یوزرنیم را بررسی کنه بعد از صحت اون فیلد role مربوط به همون username را بررسی کنه که اگر برابر با مقادیر گفته شده بود برای هر کدوم یه فرم باز کنه یا یه دستور اجرا کنه.

aliramazani
شنبه 14 خرداد 1390, 20:24 عصر
واضح تر بگم:

جدول من شامل سه فیلد هستش:

username
password
role

فیلد role یکی از سه مقدار admin یا user یا register را خواهد داشت.

توی فرم من کاربر باید یوزرنیم پسورد وارد کنه. مسلما هر کاربری که دارای یوزر و پسورد توی دیتابیس هست برای فیلد role یکی از سه مقداری که گفتم را خواهد داشت.
توی این فرم کاربر یوزر و پسوردش را وارد می کنه. اینجا باید بررسی بشه که یوزر و پسورد صحیح است یا خیر و اگر صحیح بود بررسی بشه که مقدار فیلد role اون چیه و برای هر مقدار باید دستور خاصی اجرا بشه.

مثلا کاربری که مقدار فیلد role اون برابر با admin هست با وارد کردن یوزرنیم و پسوردش در فرم لوگین می کنه و برای این کاربری که مقدار فیلد role اون برابر با admin باشه یه سری دستور خاص اجرا بشه. حالا اگر این کاربر مقدار role اون user یا register بود باید دستوراتی دیگه اجرا بشه.


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

1. از دیتابیس user فیلد هاش را نشون بده:
SELECT * " + " FROM users where username='" + username.Text + "' and password='" + password.Text + "'"

2. بررسی کن که username و پسورد برابر با مقدار داخل دیتابیس باشه
3. اگر یورنیم و پسورد صحیح نبود پیغام خطا بده
4. اگر یوزرنیم و پسورد صحیح بود مقدار role را بررسی کن که اگر مساوی با admin بود دستور 1 اجرا بشه و اگر مساوی با user بود دستور 2 اجرا بشه و اگر مساوی با register بود دستور 3 اجرا بشه.

نمی دونم خوب رسوندم؟

aliramazani
شنبه 14 خرداد 1390, 22:21 عصر
لطفا یکی راهنمای کنه خیلی نیاز دارم.

aliramazani
شنبه 14 خرداد 1390, 22:39 عصر
IF EXISTS(Select 1 From Users Where UserName = 'Ali') Begin --Do Somethings End این دستور را درستش را برام بنویسید ظاهرا مشکل داره توی سی شارپ ارور داد

B.I.O.H.A.Z.A.R.D
شنبه 14 خرداد 1390, 23:03 عصر
همه راه های ممکن رو جناب یاراحمدی بطور کامل توضیح دادن، دیگه راهی نمونده که !

حالا اینم یه پیشنهاد هستش ببینید بدردتون میخوره یا نه. توی فرم login برنامتون یه comboBox بذارید، که آیتم هاش اینایی که میخواید باشه: (admin - user - register)

بعد هر کاربری بنا به نقشی که داره باید یکی از اینها رو انتخاب کنه دیگه تا وارد برنامه بشه ! (تقریباً اکثر برنامه ها همینطورن. حتی واسه برنامه دانشگاهمون رو هم دیدم اینطوری بود)

بعد شما میتونید دستورتون رو به صورت زیر تغییر بدید:

SELECT * " + " FROM users where username='" + username.Text + "' and password='" + password.Text + "' and role = '" + comboBox1.SelectedItem.ToString() + "'"

خیلی راحت! که اگر این query اجرا بشه و چنین یوزری پیدا نکنه بهش پیغام خطا نشون میدید. برای بررسی اینکه اگر ادمین بود بره فرم 1 و یوزر بود فرم 2 . .. میتونید مقادیر comboBox رو چک کنید. (زیر خط ExcuteReader) که اگر ادمین بود، فرم1 نمایش داده بشه و ... به همین راحتی!

Reza_Yarahmadi
یک شنبه 15 خرداد 1390, 10:24 صبح
IF EXISTS(Select 1 From Users Where UserName = 'Ali') Begin --Do Somethings End این دستور را درستش را برام بنویسید ظاهرا مشکل داره توی سی شارپ ارور داد
اين كد SQL است و توي #C به همين نحوه نبايد استفاده بشه. درضمن اين دستور خيلي به كار شما نمياد.



در مورد مشكلتون هم بصورت زير عمل كنيد ،‌ يوزر و پس رو توي ديتابيس چك كنيد و Role‌ رو توي برنامه.
SqlCommand cmd = new SqlCommand("Select * From Users Where UserName = @UserName AND Pass = @Pass", con);
cmd.Parameters.AddWithValue("@UserName", "Ali");
cmd.Parameters.AddWithValue("@Pass", "123");
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if(dr.Read())
{
if(dr["Role"].ToString().ToLower() == "admin")
new Form1().Show();
else if(dr["Role"].ToString().ToLower() == "user")
new Form2().Show();
else if(dr["Role"].ToString().ToLower() == "register")
new Form3().Show();
}
con.Close();

aliramazani
یک شنبه 15 خرداد 1390, 13:51 عصر
مرسی آقای یار احمدی
با کمک شما حل شد دوست عزیز