如何使用Windows窗体+ Sql Server验证用户登录

时间:2012-04-17 00:29:57

标签: c# validation stored-procedures login windows-forms-designer

我有用于验证用户ID和密码的商店程序,如此

PROCEDURE [dbo].[CheckLoginByUserIdAndPassword2]              

@UserId char(15),            
@Password char(40)        
AS                                      
BEGIN                                      
 -- SET NOCOUNT ON added to prevent extra result sets from                                      
 -- interfering with SELECT statements.                                      
 SET NOCOUNT ON;                
    select Name, UserPersonalId, UserId from MSUSERPERSONALINFO    
    where UserId = @UserId  and Password=@Password           
END

但是,知道我的c#(windowsform应用程序)应该使用哪种代码来访问此存储过程并接收返回值,无论登录是成功还是失败?

我已经为调用该过程制作了代码,但仍然无法设置返回值..

try
            {
                string sp_name = "dbo.CheckLoginByUserIdAndPassword2";

                SqlConnection SqlCon = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=jdwlrc_db;Data Source=.");
                SqlCon.Open();

                SqlCommand SqlCom = new SqlCommand(sp_name, SqlCon);

                SqlCom.CommandType = CommandType.StoredProcedure;

                SqlCom.Parameters.Add(new SqlParameter("@UserID",nama));
                SqlCom.Parameters.Add(new SqlParameter("@Password",password));

                SqlCom.ExecuteScalar();
                SqlCon.Close();

                return true;
            }


            catch
            {
                return false;
            }
很多..

2 个答案:

答案 0 :(得分:0)

你可以这样做。

修改存储过程,如下所示

SELECT UserId FROM MSUSERPERSONALINFO WHERE UserId = @UserId AND Password=@Password

在代码中

object result = sqlCom.ExecuteScalar();
if(result != null && int.Parse(result.ToString()) > 1)
{
//Authenticated successfully.
}
else
{
//Authentication failed 
}

希望对你有所帮助。

答案 1 :(得分:0)

我建议您创建一个单独的项目(类库)来进行所有数据库通信。那应该是我们的数据访问层。您的Windows应用程序应该是某种瘦客户端,它不直接连接到数据库。然后在您的Windows项目中,添加对我们创建的类库的引用。添加引用后,您应该能够从UI项目访问类库中的函数。

使用时输入用户名和密码并单击登录按钮,您可以从文本框中读取值,并通过传递相关数据(在本例中为用户名和密码)调用类库中的函数。获得响应并决定下一步该做什么。

关于数据访问代码,我总是倾向于将我的代码包装在using语句中,这样我就不必担心我的连接是否仍然打开。

bool isValidUser=false;
try
{
 string sp_name = "dbo.CheckLoginByUserIdAndPassword2";
 using(SqlConnection SqlCon = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=jdwlrc_db;Data Source=."))
 {
   SqlCommand SqlCom = new SqlCommand(sp_name, SqlCon);
   SqlCom.CommandType = CommandType.StoredProcedure;
   SqlCom.Parameters.AddWithValue("@UserID", nama);
   SqlCom.Parameters.AddWithValue("@Password", password);
   SqlCon .Open();
   using(SQlDataReader objReader=SqlCom.ExecuteReader())
   {
      if(objReader.Read()
      {
         isValidUser=true;
         //You can read the values from reader if you want for future use like storing in session etc
      }
   }
   SqlCon.Close();
 }
}
catch(Exception ex)
{
   //Log error 
}
相关问题