C# 从sql调用过程

C# 从sql调用过程,c#,sql,.net,sql-server,stored-procedures,C#,Sql,.net,Sql Server,Stored Procedures,我正在编写winform应用程序,在其中调用datagrid中的过程。 我有一个定义过程参数的方法 public int Add_Nastavenie(out int typNastav, int nastavID, string hod) { ResetParameters(); cmd.CommandText = "add_Nastav"; cmd.CommandType = CommandType.StoredProcedure;

我正在编写winform应用程序,在其中调用datagrid中的过程。 我有一个定义过程参数的方法

 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”,但未提供该参数


有人能帮忙找到解决办法吗?谢谢

您尚未添加存储过程所需的
输出
参数:

 cmd.Parameters.Add(sqlParameterOut);
例如:

        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:

获取参数id:

var parvalue = id.value;

也许我仍然犯了错误,但我添加了您的代码,现在的错误是:形式参数“@TypNastav”没有声明为输出参数,而是传入请求的输出的实际参数。@user2641465-您需要在存储过程中将@TypNastav作为输出参数。如果不希望将其作为
输出
参数,请将其方向更改为
。输入
而不是
。输出
返回@typNastav OUTPUTyes它正在工作,但如何修复错误:此sqlParameterCollection不包含参数名为“retvalue”的sql参数。。。。在此dataConnector.Add_Nastavenie(out typNastav,nastavID,hod)。我真的不知道这是第一次使用程序一个应用程序不是我的,我只是重新制作了它。@user2641465-这听起来像是一个新问题。您应该在这里接受一个答案(如果它帮助您解决了最初的问题),然后提出一个关于sqlParameterCollection的新问题。
var parvalue = id.value;