C#执行mysql 插入语句时报错,看不懂? 上下文不是很清楚,建议你先把SQLString取得,在mysql里面执行下看看是不是行的通,再定位是什么问题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 cmdParms 参数数组 出错了,类型不匹配。 奇怪的是using { } 里面的try捕捉不到异常,异常直接跳到外层的try里面了,怎么回事呢?类型应该没错啊 sql语句没什么错啊,代码基本都是用动软生成器。 不知道你外层try写的是什么代码 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; } 不知道你外层try写的是什么代码我只保留了一个字段,结果还是报错,咋了这是? catch (MySql.Data.MySqlClient.MySqlException e) { throw e;先不说你只捕捉了MySql.Data.MySqlClient.MySqlException一种异常,就算是这种类型throw e;又直接抛上层,你这种写法就是典型的不如不捕捉异常系列 RequestNum 类型不一致??把生成的语句 用1楼的方式测试一下。 catch (MySql.Data.MySqlClient.MySqlException e)修改成catch (Exception e)异常全部拦截到里面来 类型都是varchar的,sql语句可以执行 ?cmd.Parameters“cmd.Parameters”引发了“System.ArgumentException”类型的异常 base {System.SystemException}: {"无法在对象实例上找到此方法。"} Message: "无法在对象实例上找到此方法。" ParamName: null这是怎么回事? 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); } } }头一次碰到这么怪的问题。 执行int rows = cmd.ExecuteNonQuery();语句后,出现:在 System.InvalidCastException 中第一次偶然出现的“MySql.Data.dll”类型的异常怪了,啥类型异常啊,sql的参数都是字符串,没有其他类型啊 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();.......此处省略代码是用动软生成的工厂模式架构。 chartcontrol添加滚动条,及导出图片 如何判断一个SQL语句是否执行完成了 C#怎么获得当前系统安装的所有字体 装了个vista风格包之后vs 2003不能运行了。你没有安装development enviroment 问个关于UDP断口处理的问题 若继承链过长,请问用什么方式(或模式)解决最好? c# webbrowser 如何获取table中的数据 数据类型转换,在线等! 帮帮我呀。我卡在这个好半天了,datagrid中checkbox读取数据 继承问题 wpf重载消息处理函数 关于 混淆 与 反射的冲突~~~
类型应该没错啊
sql语句没什么错啊,代码基本都是用动软生成器。
{
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;
}
{
throw e;
先不说你只捕捉了MySql.Data.MySqlClient.MySqlException一种异常,就算是这种类型throw e;又直接抛上层,你这种写法就是典型的不如不捕捉异常系列
修改成catch (Exception e)异常全部拦截到里面来
类型都是varchar的,sql语句可以执行
“cmd.Parameters”引发了“System.ArgumentException”类型的异常
base {System.SystemException}: {"无法在对象实例上找到此方法。"}
Message: "无法在对象实例上找到此方法。"
ParamName: 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);
} }
}
头一次碰到这么怪的问题。
{
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();
.......此处省略代码是用动软生成的工厂模式架构。