C# 从存储过程中按名称读取返回参数

C# 从存储过程中按名称读取返回参数,c#,stored-procedures,C#,Stored Procedures,有没有办法在C#中按名称从存储过程中读取一些自定义返回参数?迭代方式的工作原理如下: SqlDataReader rdr = cmd.ExecuteReader(); if (rdr.HasRows) { while (rdr.Read()) { if (rdr[0] != null) { string PARAM1 = rdr[0].ToString(); } if (rdr[1] != n

有没有办法在C#中按名称从存储过程中读取一些自定义返回参数?迭代方式的工作原理如下:

SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
    while (rdr.Read())
    {
        if (rdr[0] != null)
        {
            string PARAM1 = rdr[0].ToString();
        }
        if (rdr[1] != null)
        {
            string PARAM2 = rdr[1].ToString();
        }
        if (rdr[2] != null)
        {
            string PARAM3 = rdr[2].ToString();
        }
        if (rdr[3] != null)
        {
            string PARAM4 = rdr[3].ToString();
        }
    }
}
rdr.Close();
SELECT 
    'value1' AS 'PARAM1', 
    199 AS 'PARAM2', 
    'value2' AS 'PARAM3', 
    'value3' AS 'PARAM4'
RETURN 0
Param4 = rdr["@YourOutputParameter"].Value
该过程返回如下内容:

SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
    while (rdr.Read())
    {
        if (rdr[0] != null)
        {
            string PARAM1 = rdr[0].ToString();
        }
        if (rdr[1] != null)
        {
            string PARAM2 = rdr[1].ToString();
        }
        if (rdr[2] != null)
        {
            string PARAM3 = rdr[2].ToString();
        }
        if (rdr[3] != null)
        {
            string PARAM4 = rdr[3].ToString();
        }
    }
}
rdr.Close();
SELECT 
    'value1' AS 'PARAM1', 
    199 AS 'PARAM2', 
    'value2' AS 'PARAM3', 
    'value3' AS 'PARAM4'
RETURN 0
Param4 = rdr["@YourOutputParameter"].Value

…但按名称或类型获取参数并不令人满意。

使用参数名称并获取如下值:

SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
    while (rdr.Read())
    {
        if (rdr[0] != null)
        {
            string PARAM1 = rdr[0].ToString();
        }
        if (rdr[1] != null)
        {
            string PARAM2 = rdr[1].ToString();
        }
        if (rdr[2] != null)
        {
            string PARAM3 = rdr[2].ToString();
        }
        if (rdr[3] != null)
        {
            string PARAM4 = rdr[3].ToString();
        }
    }
}
rdr.Close();
SELECT 
    'value1' AS 'PARAM1', 
    199 AS 'PARAM2', 
    'value2' AS 'PARAM3', 
    'value3' AS 'PARAM4'
RETURN 0
Param4 = rdr["@YourOutputParameter"].Value
可能需要将其强制转换为所需的类型,以便字符串使用:

Param4 = rdr["@YourOutputParameter"].Value.ToString();

您真的是指返回参数,即参数方向是
ReturnValue
?或者你说的是结果集?它是rdr[name]而不是数字。你能解释一下什么没有按你想要的方式工作吗?我可以告诉您,如果读卡器有多行,您将在每次循环迭代中覆盖
PARAMx
变量,这可能不是您想要的。@UweKöhler您不需要参数,您可以通过rdr[“PARAM1”]直接访问它,参数名为:rdr[name]因为名称未知而无法工作使用参数名称的访问不适用于我,因为名称未知。可能是因为它没有在SQL内部定义为out参数?@UweKöhler请确保您试图获取值的列的名称或列别名存在于select语句中返回的列中