繁体   English   中英

使用存储过程在C#中登录

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

此外,由于你有你SqlCommandusing....块,没什么的没有一点finally的试块-在using的语句会照顾已经。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM