Milo_22
پنج شنبه 04 فروردین 1390, 14:54 عصر
با سلام به دوستان
من یک فرم لاگین داخل برنامه ام دارم که باید نام کاربری و پسورد رو چک کنه که در صورت اشتباه بودن پیغام خطای مناسبی به کاربر بده و در غیر این صورت به فرم اصلی بره .
چون دارم به صورت لایه ای این کار رو انجام می دم پس با استفاده از STP اومدم یک select نوشتم که یوزر و پسورد رو چک بکنه و صحت وجود را بفرسته به برنامه اصلی .
برای این کار از ExecuteScalar() اسفاده کردم ولی فکر می کنم چون این دستور میاد یک خونه را از جدول چک می کنه و سلول اول در جدول مورد نظر من userID هست برنامه با پیغام خطایی مواجه شده و وارد catch میشه و متوقف میشه .
این دستور داخل برنامه اصلی :
private void btnOK_Click(object sender, EventArgs e)
{
String username = txtUser.Text;
String password = txtPass.Text;
BLL.BLLBase obj = new BLL.BLLBase();
Int32 Res = 0;
try
{
Res = obj.login_user(username, password);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
if (Res == 1)
{
frmMain fMain = new frmMain();
fMain.Show();
}
else
{
lblResult.Text = "اطلاعات ورودی اشتباه می باشد!";
}
}
این دستور داخل لایه BLL :
public int login_user (string username, string password)
{
Boolean bolpass = true;
bolpass = chek_rulse_login_user(username, password);
DAL.DALBase obj = new DAL.DALBase();
int Res = 0;
try
{
if (bolpass == true)
{
obj.login_user_form(username, password);
Res = 1;
}
else
{
Res = 0;
}
}
catch (SqlException)
{
throw;
}
return Res;
}
private Boolean chek_rulse_login_user(string username, string password)
{
Boolean bolres = true;
if ((username.Trim().Length == 0) || (password.Trim().Length == 0 || password.Trim().Length < 6))
{
bolres = false;
}
return bolres;
}
این دستور داخل لایه DAL :
public Boolean login_user_form(String username, String password)
{
object obu,obp;
Boolean ok = false;
cmdchekd = new SqlCommand();
cmdchekd.CommandText = "[dbo].[chek_user]";
cmdchekd.CommandTimeout = 0;
cmdchekd.CommandType = CommandType.StoredProcedure;
con = new SqlConnection(strcon);
cmdchekd.Connection = con;
try
{
con.Open();
obu = cmdchekd.ExecuteScalar();
obp = cmdchekd.ExecuteScalar();
if ((obu != null) && (obp != null))
{
ok = true;
}
con.Close();
}
catch (SqlException)
{
throw;
}
return ok;
}
و این هم STP :
ALTER PROCEDURE [dbo].[chek_user]
@username nvarchar(50) , @password nvarchar(50)
AS
BEGIN
SELECT username , password
FROM tb_user
WHERE username = @username AND password = @password
END
موقع اجرا این پیغام خطلا را میده :
67823
چرا ؟ به همون دلیل استفاده از ExecuteScalar() ؟ یا دلیل دیگه ای داره ؟ ممکنه لطفا کمک کنید ...
من یک فرم لاگین داخل برنامه ام دارم که باید نام کاربری و پسورد رو چک کنه که در صورت اشتباه بودن پیغام خطای مناسبی به کاربر بده و در غیر این صورت به فرم اصلی بره .
چون دارم به صورت لایه ای این کار رو انجام می دم پس با استفاده از STP اومدم یک select نوشتم که یوزر و پسورد رو چک بکنه و صحت وجود را بفرسته به برنامه اصلی .
برای این کار از ExecuteScalar() اسفاده کردم ولی فکر می کنم چون این دستور میاد یک خونه را از جدول چک می کنه و سلول اول در جدول مورد نظر من userID هست برنامه با پیغام خطایی مواجه شده و وارد catch میشه و متوقف میشه .
این دستور داخل برنامه اصلی :
private void btnOK_Click(object sender, EventArgs e)
{
String username = txtUser.Text;
String password = txtPass.Text;
BLL.BLLBase obj = new BLL.BLLBase();
Int32 Res = 0;
try
{
Res = obj.login_user(username, password);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
if (Res == 1)
{
frmMain fMain = new frmMain();
fMain.Show();
}
else
{
lblResult.Text = "اطلاعات ورودی اشتباه می باشد!";
}
}
این دستور داخل لایه BLL :
public int login_user (string username, string password)
{
Boolean bolpass = true;
bolpass = chek_rulse_login_user(username, password);
DAL.DALBase obj = new DAL.DALBase();
int Res = 0;
try
{
if (bolpass == true)
{
obj.login_user_form(username, password);
Res = 1;
}
else
{
Res = 0;
}
}
catch (SqlException)
{
throw;
}
return Res;
}
private Boolean chek_rulse_login_user(string username, string password)
{
Boolean bolres = true;
if ((username.Trim().Length == 0) || (password.Trim().Length == 0 || password.Trim().Length < 6))
{
bolres = false;
}
return bolres;
}
این دستور داخل لایه DAL :
public Boolean login_user_form(String username, String password)
{
object obu,obp;
Boolean ok = false;
cmdchekd = new SqlCommand();
cmdchekd.CommandText = "[dbo].[chek_user]";
cmdchekd.CommandTimeout = 0;
cmdchekd.CommandType = CommandType.StoredProcedure;
con = new SqlConnection(strcon);
cmdchekd.Connection = con;
try
{
con.Open();
obu = cmdchekd.ExecuteScalar();
obp = cmdchekd.ExecuteScalar();
if ((obu != null) && (obp != null))
{
ok = true;
}
con.Close();
}
catch (SqlException)
{
throw;
}
return ok;
}
و این هم STP :
ALTER PROCEDURE [dbo].[chek_user]
@username nvarchar(50) , @password nvarchar(50)
AS
BEGIN
SELECT username , password
FROM tb_user
WHERE username = @username AND password = @password
END
موقع اجرا این پیغام خطلا را میده :
67823
چرا ؟ به همون دلیل استفاده از ExecuteScalar() ؟ یا دلیل دیگه ای داره ؟ ممکنه لطفا کمک کنید ...