C# 在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]. 但是我在SqlDataReader rdr中什么也没有得到;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
我有什么遗漏吗 第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)
{
....
}