当前位置: 代码迷 >> C# >> 连接mysql,执行sql语句出错:"无法将类型为“MySqlParameter”的对象强制转换为类型“MySqlParameter
  详细解决方案

连接mysql,执行sql语句出错:"无法将类型为“MySqlParameter”的对象强制转换为类型“MySqlParameter

热度:477   发布时间:2016-05-05 05:23:01.0
连接mysql,执行sql语句报错:"无法将类型为“MySqlParameter”的对象强制转换为类型“MySqlParameter
using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                using (MySqlCommand cmd = new MySqlCommand())
                {

                    
                    PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                    try
                    {
                        int rows = cmd.ExecuteNonQuery();  //执行到这里报错。
                        cmd.Parameters.Clear();
                        return rows;
                    }
                    catch (System.Exception e)
                    {
                        //throw e;
                        msg=e.Message;
                        return 1;
                    }
                }
            }


        private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText, MySqlParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Connection = conn;

            cmd.CommandText = cmdText;

            if (trans != null)
                cmd.Transaction = trans;
            cmd.CommandType = CommandType.Text;//cmdType;
            if (cmdParms != null)
            {


                foreach (MySqlParameter parameter in cmdParms)
                {
                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value == null))
                    {
                        parameter.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(parameter);

                    
                }

            }
        }

错误提示:"无法将类型为“MySql.Data.MySqlClient.MySqlParameter”的对象强制转换为类型“MySql.Data.MySqlClient.MySqlParameter”。"

------解决思路----------------------
我很怀疑这个两个MySqlParameter压根就不是同一个类型
------解决思路----------------------
cmdParms的定义和初始化代码放出来看看
------解决思路----------------------
引用:
在执行 cmd.Parameters.Add(pa);前,必须先new 一个MySqlParameter才行,
否则执行int rows = cmd.ExecuteNonQuery();就报错 ,
是怎么回事?

前面的MySqlParameter内参数格式或者MySqlParameter命名空间本身可能有问题,所以重新new MySqlParameter就OK
------解决思路----------------------
foreach (MySqlParameter parameter in cmdParms)中的MySqlParameter  与cmdParms 中的不一致吧,看看命名空间引用对了没
------解决思路----------------------
引用:
Quote: 引用:

foreach (MySqlParameter parameter in cmdParms)中的MySqlParameter  与cmdParms 中的不一致吧,看看命名空间引用对了没

单步跟踪到foreach循环,cmdParms 里面的值是正确的,类型也是正确的。

MySqlParameter[] parameters = new MySqlParameter[]{
       // todo.....
};
  相关解决方案