DBHelper类中返回DataTable 的函数    public static DataTable ExcuteDataTable(string sql, CommandType type, OleDbParameter[] paras)
         {
            try
            {
                OleDbCommand cmd = new OleDbCommand(sql, Conn);
                cmd.CommandType = type;
                if (paras != null && paras.Length > 0)
                    cmd.Parameters.AddRange(paras);
                OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                if (ds != null && ds.Tables.Count > 0)
                    return ds.Tables[0];
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
            return null;
        }在数据访问层中中写了一个查询方法          /// <summary>
        /// 根据病人ID查询病人信息
        /// </summary>
        /// <param name="PATIENT_ID">参数病人ID</param>
        /// <returns>返回数据集合</returns>
        public DataSet getPAT_MASTER_INDEXbyPATIENT_ID(string PATIENT_ID)
        {
            this.sql = "select PATIENT_ID,NAME,sex from PAT_MASTER_INDEX where PATIENT_ID=@PATIENT_ID";
            OleDbParameter[] paras=new OleDbParameter[]{ 
                new OleDbParameter("@PATIENT_ID",OleDbType.VarChar)
            };
            paras[0].Value = PATIENT_ID;
            return DBHelper.ExcuteDataSet(sql, CommandType.Text, paras);
        }这样写的时候 DBHelper中执行到 da.Fill(ds);报错 
如果把数据访问层中的方法改成下面的执行就是成功的! /// <summary>
        /// 根据病人ID查询病人信息
        /// </summary>
        /// <param name="PATIENT_ID">参数病人ID</param>
        /// <returns>返回数据集合</returns>
        public DataSet getPAT_MASTER_INDEXbyPATIENT_ID(string PATIENT_ID)
        {
            this.sql = "select PATIENT_ID,NAME,sex from PAT_MASTER_INDEX where PATIENT_ID='"+ PATIENT_ID +"'";
            //OleDbParameter[] paras=new OleDbParameter[]{ 
            //    new OleDbParameter("@PATIENT_ID",OleDbType.VarChar)
            //};
            //paras[0].Value = PATIENT_ID;
            return DBHelper.ExcuteDataSet(sql, CommandType.Text, null);
        }

解决方案 »

  1.   

    错误代码:
    system.Data.OleDb.OleDbException (0x80040E14): 在执行命令过程中,发生了一个或多个错误。
    ORA-00936: missing expression
       在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
       在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
       在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
       在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
       在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
       在 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
       在 System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
       在 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
       在 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
       在 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
       在 OutFlowOptimizationDAL.DBHelper.ExcuteDataSet(String sql, CommandType type, OleDbParameter[] paras) 位置 E:\CodeManage\OutFlowOptimization\OutFlowOptimization\OutFlowOptimizationDAL\DBHelper.cs:行号 224
      

  2.   

    ]OleDbParameter[] paras=new OleDbParameter[]

                    new OleDbParameter("@PATIENT_ID",OleDbType.VarChar)
                };
    参数的问题吧
      

  3.   

    OleDb的SQL语句不支持参数命名方式。改用?应该可以的。
       /// <summary>
            /// 根据病人ID查询病人信息
            /// </summary>
            /// <param name="PATIENT_ID">参数病人ID</param>
            /// <returns>返回数据集合</returns>
            public DataSet getPAT_MASTER_INDEXbyPATIENT_ID(string PATIENT_ID)
            {
                this.sql = "select PATIENT_ID,NAME,sex from PAT_MASTER_INDEX where PATIENT_ID=?";
                OleDbParameter[] paras=new OleDbParameter[]{ 
                    new OleDbParameter("@PATIENT_ID",OleDbType.VarChar)
                };
                paras[0].Value = PATIENT_ID;
                return DBHelper.ExcuteDataSet(sql, CommandType.Text, paras);
            }