【问题标题】:calling procedure from sql从 sql 调用过程
【发布时间】:2013-08-07 13:34:54
【问题描述】:

我正在编写 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(out typNastav,nastavID,hod);

错误消失,但应用程序不工作,程序什么也不做。

我的 try catch 异常显示:过程或函数“add_Nastav”需要参数“@TypNastav”,但未提供。

有人可以帮忙找到解决办法吗?谢谢 。

【问题讨论】:

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


    【解决方案1】:

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

     cmd.Parameters.Add(sqlParameterOut);
    

    【讨论】:

    • 也许我还是错了,但我添加了您的代码,现在错误是:形式参数“@TypNastav”未声明为 OUTPUT 参数,但在请求的输出中传递了实际参数。跨度>
    • @user2641465 - 您需要在存储过程中将 @TypNastav 设为 OUTPUT 参数。如果您不想将其作为OUTPUT 参数,请将其方向更改为.Input 而不是.Output
    • 返回@typNastav 输出
    • 是的,它正在工作,但我如何修复错误:这个 sqlParameterCollection 不包含带有 ParameterName 'retvalue' 的 sql 参数 .... 在这个 dataConnector.Add_Nastavenie(out typNastav,nastavID,hod); .我真的不知道这是第一次使用不是我的应用程序的程序,我只是重新制作它。
    • @user2641465 - 这听起来像是一个新问题。您应该在这里接受一个答案(如果它帮助您解决了最初的问题),然后提出一个关于 sqlParameterCollection 的新问题。
    【解决方案2】:

    例子:

            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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 2014-03-30
      • 2015-05-08
      相关资源
      最近更新 更多