Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中使用存储过程进行登录#_C#_.net_Stored Procedures_Ado.net - Fatal编程技术网

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

C# 在c中使用存储过程进行登录#,c#,.net,stored-procedures,ado.net,C#,.net,Stored Procedures,Ado.net,如果我使用两个参数值(admin,admin)运行存储过程 (参数:admin,admin) 我得到以下信息: Session_UID User_Group_Name Sys_User_Name ------------------------------------ -------------------------------------------------- - NULLAdministratorsNTMSAdmin No rows affected. (1 ro

如果我使用两个参数值(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]. 但是我在SqlDataReader rdr中什么也没有得到;
我有什么遗漏吗

第0列
Session\u UID
的值为空,如您所示,因此我认为这可能是您无法在此处获得任何信息的原因:

Console.WriteLine("test : " + rdr[0]);
但作为旁白,您可能会得到空引用异常

你为什么不试试这个:

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….
块中,因此您的try的
finally
块实际上没有任何意义-
using
语句已经解决了这个问题。

我还没有尝试过,但我怀疑
DataReader
类只填充了结果集,不返回值。是否可以修改存储过程以在结果集中返回成功值而不是返回值?这可能会解决问题……您是否检查了
test
变量的值?在创建和分配它之后,它在代码中被完全忽略。
try
{
    conn.Open();
    object result = cmd.ExecuteNonQuery();

    string test = (string)cmd.Parameters["@RETURN_VALUE"].Value;
    conn.Close();
}
catch (Exception ex)
{
   ....
}