上下文不是很清楚,建议你先把SQLString取得,在mysql里面执行下看看是不是行的通,再定位是什么问题

解决方案 »

  1.   

    cmdParms 参数数组 出错了,类型不匹配。
      

  2.   

    奇怪的是using { } 里面的try捕捉不到异常,异常直接跳到外层的try里面了,怎么回事呢?
    类型应该没错啊
      

  3.   


    sql语句没什么错啊,代码基本都是用动软生成器。
      

  4.   

    不知道你外层try写的是什么代码
      

  5.   

    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;
    }
      

  6.   

    不知道你外层try写的是什么代码我只保留了一个字段,结果还是报错,咋了这是?
      

  7.   

    catch (MySql.Data.MySqlClient.MySqlException e)
                         {
                             throw e;
    先不说你只捕捉了MySql.Data.MySqlClient.MySqlException一种异常,就算是这种类型throw e;又直接抛上层,你这种写法就是典型的不如不捕捉异常系列
      

  8.   

    RequestNum 类型不一致??把生成的语句 用1楼的方式测试一下。
      

  9.   

    catch (MySql.Data.MySqlClient.MySqlException e)
    修改成catch (Exception e)异常全部拦截到里面来
      

  10.   


    类型都是varchar的,sql语句可以执行
      

  11.   

    ?cmd.Parameters
    “cmd.Parameters”引发了“System.ArgumentException”类型的异常
        base {System.SystemException}: {"无法在对象实例上找到此方法。"}
        Message: "无法在对象实例上找到此方法。"
        ParamName: null这是怎么回事?
      

  12.   

    PrepareCommand(cmd, connection, null, SQLString, cmdParms);这里面的Null做入参调用可行?
      

  13.   


            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);                    
                    }            }
            }
    头一次碰到这么怪的问题。
      

  14.   

    执行int rows = cmd.ExecuteNonQuery();语句后,出现:在 System.InvalidCastException 中第一次偶然出现的“MySql.Data.dll”类型的异常怪了,啥类型异常啊,sql的参数都是字符串,没有其他类型啊
      

  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);                }不知道为什么,请大家指教。 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();
    .......此处省略代码是用动软生成的工厂模式架构。