从存储过程中获取价值

时间:2016-01-13 15:58:14

标签: 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={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;
}

enter image description here

2 个答案:

答案 0 :(得分:0)

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

CREATE PROCEDURE xda_sp_GetTagWithComponent 
    @ComponenSerialNo varchar(16),
    @SerialNo varchar (16),
    @returnResult INT OUT
AS
    .....

但是,如果您只有前两个参数,并且给定名称,您希望在存储过程中为@returnResult分配RETURN语句的值,那么您应该将其声明为

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

答案 1 :(得分:0)

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

改为使用

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