【问题标题】:Rest of the code is working fine even it is running but in my class i got this error.即使它正在运行,其余代码也可以正常工作,但在我的课堂上我遇到了这个错误。
【发布时间】:2017-08-29 16:52:17
【问题描述】:
    public static SqlParameter AddParameter(string parameterName,object value,SqlDbType DbType,int size)
    {

        SqlParameter param = new SqlParameter();
        param.ParameterName = parameterName;
        param.Value = value ?? (object)DBNull.Value;
        param.SqlDbType = DbType;
        param.Size = size;
        param.Direction = ParameterDirection.Input;
        return param;
    }

    public static DataTable ExecuteDTByProcedure(string ProcedureName ,SqlParameter[] Params)
    {

        SqlConnection con = new SqlConnection(ConnectionString);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = ProcedureName;
         cmd.Parameters.AddRange(Params);


        cmd.CommandType = CommandType.StoredProcedure;
        SqlDataAdapter sda = new SqlDataAdapter(cmd);
        DataTable dtable = new DataTable();
        try
        {

            sda.Fill(dtable);

        }
        catch (Exception ex)
        {

        }
        finally
        {
            sda.Dispose();
            cmd.Parameters.Clear();
            cmd.Dispose();
            con.Dispose();

        }


        return dtable;

    }




}

}

错误:第 43 行:cmd.Connection = con; 第 44 行:cmd.CommandText = 过程名称; 第 45 行:cmd.Parameters.AddRange(Params); 第 46 行: 第 47 行:

SqlParameterCollection 只接受非空的 SqlParameter 类型对象。 参数名称:值

【问题讨论】:

  • 嗯,错误告诉你到底出了什么问题......你显然没有提供有效的参数实例......你甚至尝试调试它吗?
  • 您仍然没有展示如何使用SqlParameter 数组的示例代码(一个或多个参数可能包含空对象)。 AddParameter 方法的内容似乎没什么问题,但是你使用它的方式可能会抛出错误。
  • 我找到了解决方案,在我的其他课程中我使用 addproducts() 函数作为

标签: asp.net


【解决方案1】:

我找到了解决方案。在 SqlParameters 数组中,我使用相同的索引号插入,因为它必须具有从 0 开始的索引

SqlParameter[] 参数 = new SqlParameter[4];

        parameters[0] =   DataLayer.DataAccess.AddParameter("@ProductName",ProductName,System.Data.SqlDbType.VarChar, 300);

        parameters[0] = DataLayer.DataAccess.AddParameter("@ProductDescription", ProductDescription, System.Data.SqlDbType.VarChar, 1000);

        parameters[0] =   DataLayer.DataAccess.AddParameter("@ProductPrice",ProductPrice,System.Data.SqlDbType.Int, 100);

        parameters[0] =   DataLayer.DataAccess.AddParameter("@ProductImage",ProductImage,System.Data.SqlDbType.VarChar,500);


               DataTable dt = DataLayer.DataAccess.ExecuteDTByProcedure("Sp_AddNewProduct", parameters);

这是正确的代码:

SqlParameter[] 参数 = new SqlParameter[4];

        parameters[0] =   DataLayer.DataAccess.AddParameter("@ProductName",ProductName,System.Data.SqlDbType.VarChar, 300);

        parameters[1] = DataLayer.DataAccess.AddParameter("@ProductDescription", ProductDescription, System.Data.SqlDbType.VarChar, 1000);

        parameters[2] =   DataLayer.DataAccess.AddParameter("@ProductPrice",ProductPrice,System.Data.SqlDbType.Int, 100);

        parameters[3] =   DataLayer.DataAccess.AddParameter("@ProductImage",ProductImage,System.Data.SqlDbType.VarChar,500);


               DataTable dt = DataLayer.DataAccess.ExecuteDTByProcedure("Sp_AddNewProduct", parameters);

注意“Parameters[]”中的所有索引号都不为零

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2020-08-30
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多