c#操作access,出现“内部错误: 无效的参数访问器: 2 BADBINDINFO”的解决办法

来源:互联网 发布:淘宝联盟软件推广赚钱 编辑:程序博客网 时间:2024/05/16 14:11

        c#操作SQL数据库的常用代码片段如下:

/// <summary>    /// 执行命令    /// </summary>    /// <param name="procName">命令文本</param>    /// <param name="prams">参数对象</param>    /// <returns></returns>    public int RunProc(string procName, SqlParameter[] prams)    {        SqlCommand cmd = CreateCommand(procName, prams);        cmd.ExecuteNonQuery();        this.Close();        //得到执行成功返回值        return (int)cmd.Parameters["ReturnValue"].Value;    }
/// <summary>    /// 创建一个SqlCommand对象以此来执行命令文本    /// </summary>    /// <param name="procName">命令文本</param>    /// <param name="prams"命令文本所需参数</param>    /// <returns>返回SqlCommand对象</returns>    private SqlCommand CreateCommand(string procName, SqlParameter[] prams)    {        // 确认打开连接        this.Open();        SqlCommand cmd = new SqlCommand(procName, con);        cmd.CommandType = CommandType.Text;     //执行类型:命令文本        // 依次把参数传入命令文本        if (prams != null)        {            foreach (SqlParameter parameter in prams)                cmd.Parameters.Add(parameter);        }        // 加入返回参数        cmd.Parameters.Add(            new SqlParameter("ReturnValue", SqlDbType.Int, 4,            ParameterDirection.ReturnValue, false, 0, 0,            string.Empty, DataRowVersion.Default, null));        return cmd;    }

         如果把SQL换成access。相应代码只需要把sql类型换成OleDb类型即可。

         c#操作access数据库的常用代码如下:

/// <summary>        /// 执行命令        /// </summary>        /// <param name="procName">命令文本</param>        /// <param name="prams">参数对象</param>        /// <returns></returns>        public int RunProc(string procName, OleDbParameter[] prams)        {            OleDbCommand cmd = CreateCommand(procName, prams);            cmd.ExecuteNonQuery();            this.Close();            //得到执行成功返回值            //return (int)cmd.Parameters["ReturnValue"].Value;            return 1;        }
/// <summary>        ///  创建一个OleDbCommand对象以此来执行命令文本        /// </summary>        /// <param name="procName">命令文本</param>        /// <param name="prams"命令文本所需参数</param>        /// <returns>返回OleDbCommand对象</returns>        private OleDbCommand CreateCommand(string procName, OleDbParameter[] prams)        {            // 确认打开连接            this.Open();            OleDbCommand cmd = new OleDbCommand(procName, con);            cmd.CommandType = CommandType.Text;     //执行类型:命令文本            // 依次把参数传入命令文本            if (prams != null)            {                foreach (OleDbParameter parameter in prams)                    cmd.Parameters.Add(parameter);            }            // 加入返回参数            //cmd.Parameters.Add(            //    new OleDbParameter("ReturnValue", OleDbType.Integer, 4,            //    ParameterDirection.ReturnValue, false, 0, 0,            //    string.Empty, DataRowVersion.Default, null));            return cmd;        }

        由于access不需要返回值。因此CreateCommand函数里面不需要如下部分:

cmd.Parameters.Add(            new SqlParameter("ReturnValue", SqlDbType.Int, 4,            ParameterDirection.ReturnValue, false, 0, 0,            string.Empty, DataRowVersion.Default, null));

        如果不把该部分去掉,依然照搬操作SQL的代码。将出现报错“异常详细信息: System.InvalidOperationException: System.Data.OleDb.OleDbDataAdapter 内部错误: 无效的参数访问器: 2 BADBINDINFO。”       

        如果碰到类似错误,不妨按照上述的把返回值注释掉。

原创粉丝点击