[英]using a stored procedure for login in c#
如果我运行具有两个参数值(admin,admin)(参数:admin,admin)的存储过程,则会收到以下消息:
Session_UID User_Group_Name Sys_User_Name ------------------------------------ -------------------------------------------------- - NULLAdministratorsNTMSAdmin No rows affected. (1 row(s) returned) @RETURN_VALUE = 0 Finished running [dbo].[p_SYS_Login].
为了在c#中获得相同的消息,我使用了以下代码:
string strConnection = Settings.Default.ConnectionString;
using (SqlConnection conn = new SqlConnection(strConnection))
{
using (SqlCommand cmd = new SqlCommand())
{
SqlDataReader rdr = null;
cmd.Connection = conn;
cmd.CommandText = "p_SYS_Login";
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter paramReturnValue = new SqlParameter();
paramReturnValue.ParameterName = "@RETURN_VALUE";
paramReturnValue.SqlDbType = SqlDbType.Int;
paramReturnValue.SourceColumn = null;
paramReturnValue.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(paramReturnValue);
cmd.Parameters.Add(paramGroupName);
cmd.Parameters.Add(paramUserName);
cmd.Parameters.AddWithValue("@Sys_Login", "admin");
cmd.Parameters.AddWithValue("@Sys_Password", "admin");
try
{
conn.Open();
rdr = cmd.ExecuteReader();
string test = (string)cmd.Parameters["@RETURN_VALUE"].Value;
while (rdr.Read())
{
Console.WriteLine("test : " + rdr[0]);
}
}
catch (Exception ex)
{
string message = ex.Message;
string caption = "MAVIS Exception";
MessageBoxButtons buttons = MessageBoxButtons.OK;
MessageBox.Show(
message,
caption,
buttons,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button1);
}
finally
{
cmd.Dispose();
conn.Close();
}
}
}
但是我在SqlDataReader rdr中什么也没得到; 有什么我想念的吗?
如您所显示,第0列Session_UID
值为null,因此我认为这可能是您在此处未获得任何信息的原因:
Console.WriteLine("test : " + rdr[0]);
但顺便说一句,您可能会得到Null引用异常。
仍然为什么不试试这个:
Console.WriteLine("Return Value: " + test);
while(rdr.Read()){
Console.WriteLine("test: " + rdr[0]+" " + rdr[1]+ " " + rdr[1]);
}
如果要返回一个返回值,但不返回结果行,则不应使用.ExecuteReader()
,而应使用.ExecuteNonQuery()
调用:
try
{
conn.Open();
object result = cmd.ExecuteNonQuery();
string test = (string)cmd.Parameters["@RETURN_VALUE"].Value;
conn.Close();
}
catch (Exception ex)
{
....
}
此外,由于你有你SqlCommand
的using....
块,没什么的没有一点finally
的试块-在using
的语句会照顾已经。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.