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

lashengcrh 2014-12-12 04:54:43
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”。"
...全文
653 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sirili 2015-12-15
  • 打赏
  • 举报
回复
1,删除项目中mysql.data引用 删除项目中bin下的mysql.data.dll 2,nuget安装mysql.data
zhugujing 2015-06-15
  • 打赏
  • 举报
回复
怎么解决的?是不是mysql.data的版本和程序.net版本不匹配?
  • 打赏
  • 举报
回复
引用 8 楼 lashengcrh 的回复:
[quote=引用 6 楼 duanzi_peng 的回复:] foreach (MySqlParameter parameter in cmdParms)中的MySqlParameter 与cmdParms 中的不一致吧,看看命名空间引用对了没
单步跟踪到foreach循环,cmdParms 里面的值是正确的,类型也是正确的。 [/quote] MySqlParameter[] parameters = new MySqlParameter[]{ // todo..... };
lashengcrh 2014-12-17
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:
foreach (MySqlParameter parameter in cmdParms)中的MySqlParameter 与cmdParms 中的不一致吧,看看命名空间引用对了没
单步跟踪到foreach循环,cmdParms 里面的值是正确的,类型也是正确的。
lashengcrh 2014-12-17
  • 打赏
  • 举报
回复
引用 4 楼 Z65443344 的回复:
cmdParms的定义和初始化代码放出来看看
StringBuilder strSql=new StringBuilder(); strSql.Append("insert into report("); strSql.Append("RequestNum,PatientName,PatientSex,PatientRecordNo,SampleType,SampleState,.......)"); strSql.Append(" values ("); strSql.Append("@RequestNum,@PatientName,@PatientSex,@PatientRecordNo,@SampleType,@SampleState......)"); MySqlParameter[] parameters = { new MySqlParameter("@RequestNum", MySqlDbType.VarChar,50), new MySqlParameter("@PatientName", MySqlDbType.VarChar,50), new MySqlParameter("@PatientSex", MySqlDbType.VarChar,50), new MySqlParameter("@PatientRecordNo", MySqlDbType.VarChar,50), new MySqlParameter("@SampleType", MySqlDbType.VarChar,50), new MySqlParameter("@SampleState", MySqlDbType.VarChar .......此处省略 parameters[0].Value = model.RequestNum.ToString(); parameters[1].Value = model.PatientName.ToString(); parameters[2].Value = model.PatientSex.ToString(); parameters[3].Value = model.PatientRecordNo.ToString(); parameters[4].Value = model.SampleType.ToString(); parameters[5].Value = model.SampleState.ToString(); .......此处省略 代码是用动软生成的工厂模式架构。
  • 打赏
  • 举报
回复
foreach (MySqlParameter parameter in cmdParms)中的MySqlParameter 与cmdParms 中的不一致吧,看看命名空间引用对了没
xdashewan 2014-12-17
  • 打赏
  • 举报
回复
引用 3 楼 lashengcrh 的回复:
在执行 cmd.Parameters.Add(pa);前,必须先new 一个MySqlParameter才行, 否则执行int rows = cmd.ExecuteNonQuery();就报错 , 是怎么回事?
前面的MySqlParameter内参数格式或者MySqlParameter命名空间本身可能有问题,所以重新new MySqlParameter就OK
於黾 2014-12-17
  • 打赏
  • 举报
回复
cmdParms的定义和初始化代码放出来看看
lashengcrh 2014-12-17
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
我很怀疑这个两个MySqlParameter压根就不是同一个类型
在执行 cmd.Parameters.Add(pa);前,必须先new 一个MySqlParameter才行, 否则执行int rows = cmd.ExecuteNonQuery();就报错 , 是怎么回事?
lashengcrh 2014-12-15
  • 打赏
  • 举报
回复
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); } 结果发现这个循环中的问题,改为以下后,正常 foreach (MySqlParameter parameter in cmdParms) { if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null)) { parameter.Value = DBNull.Value; } MySqlParameter pa = new MySqlParameter(parameter.ParameterName, parameter.MySqlDbType.ToString()); pa.Value = parameter.Value.ToString(); cmd.Parameters.Add(pa); } 不知道为什么,请大家指教。
xdashewan 2014-12-12
  • 打赏
  • 举报
回复
我很怀疑这个两个MySqlParameter压根就不是同一个类型

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧