0

我有像这样验证用户 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;
            }

多谢..

4

2 回答 2

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 
}

希望对您有所帮助。

于 2012-04-17T01:02:37.833 回答
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 
}
于 2012-04-17T01:17:59.483 回答