我有用于验证用户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;
}
很多..
答案 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
}