public override string Execute() { string sMsg = string.Empty; SetError(sMsg); ResetAffectedRows(); SQLNoneQuery sql = base.ExecutionCommand; ConnectionItem connect = Connection; DbTransaction transaction = Transaction; if (sql != null && connect != null) { DbCommand cmd = connect.ConnectionObject.CreateCommand(); if (transaction != null) { cmd.Transaction = transaction; } bool bClosed = !connect.ConnectionObject.Opened; if (bClosed) { connect.ConnectionObject.Open(); } if (connect.ConnectionObject.Opened) { try { int i; EnumParameterStyle pstyle = connect.ParameterStyle; cmd.CommandText = sql.SQL; if (sql.CommandType == enmNonQueryType.StoredProcedure) { cmd.CommandType = CommandType.StoredProcedure; } else { cmd.CommandType = CommandType.Text; } int nCount = ParameterCount; for (i = 0; i < nCount; i++) { DbParameter pam = cmd.CreateParameter(); if (pstyle == EnumParameterStyle.LeadingQuestionMark) { if (sql.Param_Name[i].StartsWith("@", StringComparison.OrdinalIgnoreCase)) { pam.ParameterName = string.Format(CultureInfo.InvariantCulture, "?{0}", sql.Param_Name[i].Substring(1)); } else if (sql.Param_Name[i].StartsWith("?", StringComparison.OrdinalIgnoreCase)) { pam.ParameterName = sql.Param_Name[i]; } else { pam.ParameterName = string.Format(CultureInfo.InvariantCulture, "?{0}", sql.Param_Name[i]); } } else { if (sql.Param_Name[i].StartsWith("@", StringComparison.OrdinalIgnoreCase)) { pam.ParameterName = sql.Param_Name[i]; } else { pam.ParameterName = string.Format(CultureInfo.InvariantCulture, "@{0}", sql.Param_Name[i]); } } pam.DbType = ValueConvertor.OleDbTypeToDbType(sql.Param_OleDbType[i]); pam.Direction = this.Param_Directions[i]; pam.Size = EPField.FieldDataSize(sql.Param_OleDbType[i], this.Param_DataSize[i]); pam.Value = ValueConvertor.ConvertByOleDbType(sql.Parameters[i].Value, sql.Param_OleDbType[i]); cmd.Parameters.Add(pam); } cmd.Prepare(); DbDataReader dr = cmd.ExecuteReader(); _dataset = new DataSet("Results"); int n = 1; while (true) { DataTable tbl = new DataTable(string.Format("Table{0}", n)); for (i = 0; i < dr.FieldCount; i++) { DataColumn dc = new DataColumn(dr.GetName(i), dr.GetFieldType(i)); tbl.Columns.Add(dc); } _dataset.Tables.Add(tbl); while (dr.Read()) { object[] vs = new object[dr.FieldCount]; for (int k = 0; k < dr.FieldCount; k++) { vs[k] = dr.GetValue(k); } tbl.Rows.Add(vs); } n++; if (!dr.NextResult()) { break; } } dr.Close(); if (bClosed) { closeConnections(); } for (i = 0; i < nCount; i++) { ParameterDirection pt = cmd.Parameters[i].Direction; if (pt != ParameterDirection.Input) { sql.Parameters[i].Value = cmd.Parameters[i].Value; } } FireExecuteFinish(); } catch (Exception er) { if (transaction != null) { transaction.Rollback(); transaction.Dispose(); ResetTransaction(); throw; } else { sMsg = ExceptionLimnorDatabase.FormExceptionText(er); } } finally { if (bClosed) { if (connect.ConnectionObject.State != ConnectionState.Closed) { connect.ConnectionObject.Close(); } } } } else { sMsg = "Database connection not set"; } } else { sMsg = "SQL statement not set"; } if (!string.IsNullOrEmpty(sMsg)) { SetError(sMsg); } return(sMsg); }