簡體   English   中英

如何使用WindowsForm + SqlServer驗證用戶登錄

[英]How To Validate User Login with WindowsForm + SqlServer

我有這樣的驗證用戶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;
            }

多謝..

你可以做這樣的事情。

修改存儲過程,如下所示

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 
}

希望對您有幫助。

我建議您創建一個單獨的項目(一個類庫)來進行所有數據庫通信。 那應該是我們的數據訪問層。 您的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 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM