从sql调用过程

时间:2013-08-07 13:34:54

标签: c# .net sql winforms stored-procedures

我正在编写winform应用程序,我在我的数据网格中调用过程。 我有定义过程参数的方法

 public int Add_Nastavenie(out int typNastav, int nastavID, string hod)
    {
        ResetParameters();
        cmd.CommandText = "add_Nastav";
        cmd.CommandType = CommandType.StoredProcedure;

        SqlParameter sqlParameter;

        var sqlParameterOut = new SqlParameter("@TypNastav", SqlDbType.Int);
        sqlParameterOut.Direction = ParameterDirection.Output;


        sqlParameter = new SqlParameter("@NastavenieID", SqlDbType.Int);
        sqlParameter.Direction = ParameterDirection.Input;
        sqlParameter.Value = nastavID;
        cmd.Parameters.Add(sqlParameter);

        sqlParameter = new SqlParameter("@Hodnota", SqlDbType.NVarChar, 100);
        sqlParameter.Direction = ParameterDirection.Input;
        sqlParameter.Value = hod;
        cmd.Parameters.Add(sqlParameter);

        var sqlParameterRet = new SqlParameter("retValue", SqlDbType.Int);
        sqlParameterRet.Direction = ParameterDirection.ReturnValue;

        cmd.ExecuteNonQuery();
        typNastav = (int)sqlParameterOut.Value;
        return (int)cmd.Parameters["retvalue"].Value;

    }

然后我用这种方式调用程序

 dataConnector.Add_Nastavenie(typNastav,nastavID,hod);

我有错误参数1必须通过' out'关键字

我将其更改为dataConnector.Add_Nastavenie(输出typNastav,nastavID,hod);

错误消失但应用程序无法正常工作,程序无效。

我的尝试捕获异常显示:过程或功能' add_Nastav'期望参数' @ TypNastav',这是未提供的。

有人可以帮忙找到解决方案吗?谢谢 。

2 个答案:

答案 0 :(得分:5)

您尚未添加存储过程所期望的OUTPUT参数:

 cmd.Parameters.Add(sqlParameterOut);

答案 1 :(得分:1)

示例:

        SqlCommand com = new SqlCommand("update_outptu_Stock", connect.con);
            com.CommandType = CommandType.StoredProcedure;
            com.Parameters.AddWithValue("@cg_id ", 1);
            SqlParameter par = new SqlParameter("@id", SqlDbType.Int)
            {
                Direction = ParameterDirection.Output
            };

SQL:

Create proc update_outptu_Stock 
@cg_id int,
@id int output
as
begin
    insert into example(cg_id) values (@cg_id)
    set @id  = SCOPE_IDENTITY() -- get value of id created
end
Go

获取参数ID:

var parvalue = id.value;