PDA

View Full Version : سوال: خطا در مقایسه مقادیر تکس باکس



abasi.mohsen
چهارشنبه 14 اسفند 1392, 23:27 عصر
سلام
چرا وقتی برنامه رو اجرا میکنم قسمت else برنامه اجرا میشه در صورتی که مقادیر user و pass رو بصورت صحیح وارد میکنم ایا اشکال از dataset هستش؟

string user, pass;
if (txtuser.Text == "" || txtpass.Text == "")
{
MessageBox.Show("لطفا نام کاربری و رمز ورود را وارد کنید", "خطا",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|\user.mdf;
Integrated Security=True;User Instance=True";
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from tbluser";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
con.Close();
user = ds.Tables[0].Rows[0][0].ToString();
pass = ds.Tables[0].Rows[0][1].ToString();

if (txtuser.Text == user && txtpass.Text == pass)
{
frmmain fm = new frmmain();
fm.Show();
this.Hide();
}
else
label3.Visible = true;

hosseinbarnamenevis
چهارشنبه 14 اسفند 1392, 23:42 عصر
کدتون که اصلن درست نیست! دستور سلکت به نظرم اشتباهه
اما اینجا کدتون رو بزارید داخل تگ کد که بشه خوند!

heavenbird
پنج شنبه 15 اسفند 1392, 00:02 صبح
جدول tbluser فقط user و pass داره که * زدید؟
باید فقط user و pass رو بخونید. به ترتیب هم باید بنویسید

abasi.mohsen
پنج شنبه 15 اسفند 1392, 12:54 عصر
جدول tbluser فقط user و pass داره که * زدید؟
باید فقط user و pass رو بخونید. به ترتیب هم باید بنویسید

بله فقط user و pass دارد

abasi.mohsen
پنج شنبه 15 اسفند 1392, 13:24 عصر
از استادان محترم کسی نیست کمک کنه

aslan
پنج شنبه 15 اسفند 1392, 14:10 عصر
سلام
روی خط
if (txtuser.Text == user && txtpass.Text == pass)
breakpoint بزارید ببینید متغیرهای user و pass چیزی هستن که انتظارش و دارین یا نه ؟
جواب اگر آره بود :خط کدهای بالا تر از این خط را چک و اصلاح کنید
ولی اگر این متغیرها برابر چیزی بود که انتظار داری : این خط کد و کدهای پایین تر از اون را چک و اصلاح کنید
موفق باشید

abasi.mohsen
پنج شنبه 15 اسفند 1392, 16:05 عصر
سلام
روی خط
if (txtuser.Text == user && txtpass.Text == pass)
breakpoint بزارید ببینید متغیرهای user و pass چیزی هستن که انتظارش و دارین یا نه ؟
جواب اگر آره بود :خط کدهای بالا تر از این خط را چک و اصلاح کنید
ولی اگر این متغیرها برابر چیزی بود که انتظار داری : این خط کد و کدهای پایین تر از اون را چک و اصلاح کنید
موفق باشید

متغیرهای user و pass رو در لیبل ریختم مقادیر همانهایی بودند که انتظار میرفت ولی باز هم قسمت else اجرا میشه

abasi.mohsen
پنج شنبه 15 اسفند 1392, 16:17 عصر
فهمیدم چی شده!
چون مقادیر خانه های بانک اطلاعاتی رو از نوع ncar(10) انتخاب کردم به تعداد باقیمانده فضای خالی space میگذارد مثلا اگر نام علی در ستون user باشد به تعداد 7 کارارکتر space ایجاد میشود.
برای از بین بردن فضای خالی باید از trim() استفاده کنیم.
user = ds.Tables[0].Rows[0][0].ToString().Trim();
pass = ds.Tables[0].Rows[0][1].ToString().Trim();

hafez_ka
پنج شنبه 15 اسفند 1392, 17:08 عصر
از این روش استفاده کنی بهتره


SqlConnection con = new SqlConnection("");
SqlCommand cmd = new SqlCommand(string.Format("select * from youtable where username = {0} and password = {1}", txt_username.Text.Trim(), txt_password.Text.Trim()), con);
DataTable dt = new DataTable();
con.Open();
dt.Load(cmd.ExecuteReader());
con.Close();
if (dt.Rows.Count > 0)
{
/////Success code
}
else
{
////feild code
}

Mahmoud.Afrad
پنج شنبه 15 اسفند 1392, 17:09 عصر
باید نوع ستون را برای داده های یونیکد از نوع nvarchar انتخاب کنی.
باید کوئری رو طوری اصلاح کنی که فقط چک کنه چنین یوزری موجود هست یا نه. وقتی کوئری بدون where باشه همه سطرهای جدول سلکت میشه.