[英]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.