C# 从存储过程中获取值

C# 从存储过程中获取值,c#,stored-procedures,ado.net,C#,Stored Procedures,Ado.net,我想从存储过程中创建c#helper 存储过程结束代码 当我运行代码时,我发现错误过程或函数的参数太多 public int xda_sp_GetTagWithComponent(string ComponentNo) { SqlConnection conn = new SqlConnection(string.Format("Data Source={0};Password={1};User ID={2};Initial Catalog={3};Connection Timeout=

我想从存储过程中创建c#helper

存储过程结束代码

当我运行代码时,我发现错误过程或函数的参数太多

public int xda_sp_GetTagWithComponent(string ComponentNo)
{
    SqlConnection conn = new SqlConnection(string.Format("Data Source={0};Password={1};User ID={2};Initial Catalog={3};Connection Timeout={4}", DataSource, Password, UserID, InitialCatalog, ConnTimeOut));
    int ReturnResult;
    try
    {
        conn.Open();
        // 1.  SP name
        SqlCommand cmd = new SqlCommand("xda_sp_GetTagWithComponent", conn);

        // 2. to execute a stored procedure   
        cmd.CommandType = CommandType.StoredProcedure;

        // 3. add parameter 
        cmd.Parameters.Add("@ComponentSerialNo", SqlDbType.VarChar, 16).Direction = ParameterDirection.Input;
        cmd.Parameters["@ComponentSerialNo"].Value = ComponentNo;

        cmd.Parameters.Add("@SerialNo", SqlDbType.VarChar, 16).Direction = ParameterDirection.Output;
        cmd.Parameters["@SerialNo"].Value = "";

        cmd.Parameters.Add("@returnResult", SqlDbType.Int, 100).Direction = ParameterDirection.Output;

        //4. Execute
        cmd.ExecuteNonQuery();

        //5. Get Result
        ReturnResult = Convert.ToInt32(cmd.Parameters["@returnResult"].Value);
    }

    catch
    {
        ReturnResult = 0;
    }

    finally
    {
        // Close the connection
        if (conn != null)
        {
        conn.Close();
        }
    }

    return ReturnResult;
}

您正在将最后一个参数设置为
ParameterDirection.Output
,但这意味着您的存储过程需要在传入参数列表中将其声明为输出。像这样的

CREATE PROCEDURE xda_sp_GetTagWithComponent 
    @ComponenSerialNo varchar(16),
    @SerialNo varchar (16),
    @returnResult INT OUT
AS
    .....
但是,如果您只有前两个参数,并且给定名称,希望将存储过程中RETURN语句的值分配给@returnResult,那么应该将其声明为

cmd.Parameters.Add("@returnResult", SqlDbType.Int).Direction = 
                                    ParameterDirection.ReturnValue;
改用

   cmd.Parameters.Add("@SerialNo", SqlDbType.VarChar, 16).Direction = ParameterDirection.InputOutput;
                cmd.Parameters["@SerialNo"].Value = "";

您可以发布您看到的特定错误吗?…您可以粘贴存储过程代码吗?…您的第二个参数具有输出方向,它不应该是InputOutput吗?
   cmd.Parameters.Add("@SerialNo", SqlDbType.VarChar, 16).Direction = ParameterDirection.InputOutput;
                cmd.Parameters["@SerialNo"].Value = "";