参数C#SQL出错

参数C#SQL出错,c#,sql,sql-server,C#,Sql,Sql Server,我需要验证参数RGP,PEIXE,DATA\u REGISTRO,以便我的方法返回true。但在PEIXE参数上,此给定错误: 需要“PEIXE”参数,但未提供该参数 PEIXE是SQL上的Varchar类型,RGP是Int类型,DATA_REGISTRO是日期类型 public bool Search_RGP_Cadastro(int param_RGP, string param_date, string param_peixe) { SqlDataReader o

我需要验证参数
RGP,PEIXE,DATA\u REGISTRO
,以便我的方法返回true。但在PEIXE参数上,此给定错误:

需要“PEIXE”参数,但未提供该参数

PEIXE是SQL上的Varchar类型,RGP是Int类型,DATA_REGISTRO是日期类型

 public bool Search_RGP_Cadastro(int param_RGP, string param_date, string param_peixe)
    {
        SqlDataReader objReader;
        SqlCommand objcmd = null;

        vsql = "SELECT [RGP], [PEIXE], [PESO], [QUANTIDADE], [DATA_REGISTRO] FROM cadastro WHERE RGP = @RGP and PEIXE = @PEIXE and DATA_REGISTRO = @DATA_REGISTRO";

        if (this.Conectar())
        {
            try
            {
                DateTime dtParam = DateTime.Parse(param_date);

                objcmd = new SqlCommand(vsql, objCon);

                objcmd.Parameters.Add(new SqlParameter("@RGP", param_RGP));
                objcmd.Parameters.Add(new SqlParameter("@PEIXE", param_peixe));
                objcmd.Parameters.Add(new SqlParameter("@DATA_REGISTRO", dtParam));

                objReader = objcmd.ExecuteReader();

                if (objReader.Read())
                {
                    valor.retorna_RGP = objReader.GetInt32(0);
                    valor.retorna_nome_peixe = objReader.GetString(1);
                    valor.retorna_peso = objReader.GetDouble(2);
                    valor.retorna_Quantidade = objReader.GetInt32(3);
                    valor.retorna_date_time = objReader.GetDateTime(4);
                }
                return true;
            }
            catch
            {
                throw;
            }
            finally
            {
                this.Desconectar();
            }


        }
        else
            return false;


    }

我会用单引号将你的param_peix括起来,如下所示:

objcmd.Parameters.Add(new SqlParameter("@PEIXE", "'" + param_peixe + "'"));

这不是我第一次看到SQL拒绝使用字符串作为VARCHAR。

Ok,这是值得的。谢谢。您不应该重复使用SQL连接。ADO.NET已经内置,您应该使用块在
中声明所需范围内的
SqlConnection
对象。只要传入相同的连接字符串,第二个
SqlConnection
就可以重新使用来自先前处理的对象的连接。