C#执行mysql 插入语句时报错,看不懂?

lashengcrh 2014-12-12 02:50:30


using (MySqlConnection connection = new MySqlConnection(connectionString))
{
using (MySqlCommand cmd = new MySqlCommand())
{
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
throw e;
执行int rows = cmd.ExecuteNonQuery();时报的错误
...全文
291 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lashengcrh 2014-12-17
  • 打赏
  • 举报
回复
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); } 不知道为什么,请大家指教。 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(); .......此处省略 代码是用动软生成的工厂模式架构。
zcmoliu 2014-12-12
  • 打赏
  • 举报
回复
DING YIGE
lashengcrh 2014-12-12
  • 打赏
  • 举报
回复

不会吧
rokerker 2014-12-12
  • 打赏
  • 举报
回复
怀疑数据库类型跟参数类型不兼容,转换失败了
lashengcrh 2014-12-12
  • 打赏
  • 举报
回复
执行int rows = cmd.ExecuteNonQuery();语句后,出现: 在 System.InvalidCastException 中第一次偶然出现的“MySql.Data.dll”类型的异常 怪了,啥类型异常啊,sql的参数都是字符串,没有其他类型啊
lashengcrh 2014-12-12
  • 打赏
  • 举报
回复
引用 14 楼 rokerker 的回复:
PrepareCommand(cmd, connection, null, SQLString, cmdParms); 这里面的Null做入参调用可行?
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); } } } 头一次碰到这么怪的问题。
rokerker 2014-12-12
  • 打赏
  • 举报
回复
PrepareCommand(cmd, connection, null, SQLString, cmdParms); 这里面的Null做入参调用可行?
lashengcrh 2014-12-12
  • 打赏
  • 举报
回复
?cmd.Parameters “cmd.Parameters”引发了“System.ArgumentException”类型的异常 base {System.SystemException}: {"无法在对象实例上找到此方法。"} Message: "无法在对象实例上找到此方法。" ParamName: null 这是怎么回事?
lashengcrh 2014-12-12
  • 打赏
  • 举报
回复
引用 9 楼 duanzi_peng 的回复:
RequestNum 类型不一致??把生成的语句 用1楼的方式测试一下。
类型都是varchar的,sql语句可以执行
lashengcrh 2014-12-12
  • 打赏
  • 举报
回复
引用 10 楼 rokerker 的回复:
catch (MySql.Data.MySqlClient.MySqlException e)
修改成

catch (Exception e)

异常全部拦截到里面来


rokerker 2014-12-12
  • 打赏
  • 举报
回复
catch (MySql.Data.MySqlClient.MySqlException e) 修改成

catch (Exception e)
异常全部拦截到里面来
exception92 2014-12-12
  • 打赏
  • 举报
回复
RequestNum 类型不一致??把生成的语句 用1楼的方式测试一下。
xdashewan 2014-12-12
  • 打赏
  • 举报
回复
catch (MySql.Data.MySqlClient.MySqlException e) { throw e; 先不说你只捕捉了MySql.Data.MySqlClient.MySqlException一种异常,就算是这种类型throw e;又直接抛上层,你这种写法就是典型的不如不捕捉异常系列
lashengcrh 2014-12-12
  • 打赏
  • 举报
回复
引用 5 楼 duanzi_peng 的回复:
引用 3 楼 lashengcrh 的回复:
奇怪的是using { } 里面的try捕捉不到异常,异常直接跳到外层的try里面了,怎么回事呢? 类型应该没错啊 [quote=引用 2 楼 duanzi_peng 的回复:] cmdParms 参数数组 出错了,类型不匹配。
不知道你外层try写的是什么代码[/quote] 我只保留了一个字段,结果还是报错,咋了这是?
lashengcrh 2014-12-12
  • 打赏
  • 举报
回复
public bool Add(Panther.Model.report model) { StringBuilder strSql=new StringBuilder(); strSql.Append("insert into report("); //strSql.Append("RequestNum,PatientName,PatientSex,PatientRecordNo,SampleType,SampleState,SendDept,SendDoctor,SendDate,PerformDept,ClinicalDiagnosis,Note,LabResult,NormalRefValue,TestingValue,ReportDoc,CheckDoc,ReportDate)"); strSql.Append("RequestNum)"); strSql.Append(" values ("); //strSql.Append("@RequestNum,@PatientName,@PatientSex,@PatientRecordNo,@SampleType,@SampleState,@SendDept,@SendDoctor,@SendDate,@PerformDept,@ClinicalDiagnosis,@Note,@LabResult,@NormalRefValue,@TestingValue,@ReportDoc,@CheckDoc,@ReportDate)"); strSql.Append("@RequestNum)"); 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,50), //new MySqlParameter("@SendDept", MySqlDbType.VarChar,50), //new MySqlParameter("@SendDoctor", MySqlDbType.VarChar,50), //new MySqlParameter("@SendDate", MySqlDbType.VarChar,50), //new MySqlParameter("@PerformDept", MySqlDbType.VarChar,50), //new MySqlParameter("@ClinicalDiagnosis", MySqlDbType.VarChar,50), //new MySqlParameter("@Note", MySqlDbType.VarChar,50), //new MySqlParameter("@LabResult", MySqlDbType.VarChar,50), //new MySqlParameter("@NormalRefValue", MySqlDbType.VarChar,50), //new MySqlParameter("@TestingValue", MySqlDbType.VarChar,50), //new MySqlParameter("@ReportDoc", MySqlDbType.VarChar,50), //new MySqlParameter("@CheckDoc", MySqlDbType.VarChar,50), //new MySqlParameter("@ReportDate", MySqlDbType.VarChar,50) }; parameters[0].Value = model.RequestNum; //parameters[1].Value = model.PatientName; //parameters[2].Value = model.PatientSex; //parameters[3].Value = model.PatientRecordNo; //parameters[4].Value = model.SampleType; //parameters[5].Value = model.SampleState; //parameters[6].Value = model.SendDept; //parameters[7].Value = model.SendDoctor; //parameters[8].Value = model.SendDate; //parameters[9].Value = model.PerformDept; //parameters[10].Value = model.ClinicalDiagnosis; //parameters[11].Value = model.Note; //parameters[12].Value = model.LabResult; //parameters[13].Value = model.NormalRefValue; //parameters[14].Value = model.TestingValue; //parameters[15].Value = model.ReportDoc; //parameters[16].Value = model.CheckDoc; //parameters[17].Value = model.ReportDate; int rows=DbHelperMySQL.ExecuteSql(strSql.ToString(),parameters); if (rows > 0) { return true; } else { return false; }
exception92 2014-12-12
  • 打赏
  • 举报
回复
引用 3 楼 lashengcrh 的回复:
奇怪的是using { } 里面的try捕捉不到异常,异常直接跳到外层的try里面了,怎么回事呢? 类型应该没错啊
引用 2 楼 duanzi_peng 的回复:
cmdParms 参数数组 出错了,类型不匹配。
不知道你外层try写的是什么代码
lashengcrh 2014-12-12
  • 打赏
  • 举报
回复
引用 1 楼 rokerker 的回复:
上下文不是很清楚,建议你先把SQLString取得,在mysql里面执行下看看是不是行的通,再定位是什么问题
sql语句没什么错啊,代码基本都是用动软生成器。
lashengcrh 2014-12-12
  • 打赏
  • 举报
回复
奇怪的是using { } 里面的try捕捉不到异常,异常直接跳到外层的try里面了,怎么回事呢? 类型应该没错啊
引用 2 楼 duanzi_peng 的回复:
cmdParms 参数数组 出错了,类型不匹配。
exception92 2014-12-12
  • 打赏
  • 举报
回复
cmdParms 参数数组 出错了,类型不匹配。
rokerker 2014-12-12
  • 打赏
  • 举报
回复
上下文不是很清楚,建议你先把SQLString取得,在mysql里面执行下看看是不是行的通,再定位是什么问题

110,571

社区成员

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

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

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