Esempio n. 1
0
        private void LogSqlStatement(SqlParts sqlParts)
        {
            if (_log != null && _log.IsDebugEnabled == true)
            {
                var logMessage = new StringBuilder();
                logMessage.AppendFormat("{0};", sqlParts.ToString());
                for (var i = 0; i < sqlParts.Parameters.Count(); i++)
                {
                    var paramValue   = sqlParts.Parameters.ElementAt(i).Value.ToString();
                    var paramMessage = string.Format(" p{0} = '{1}';",
                                                     i, sqlParts.Parameters.ElementAt(i).Value.ToString());

                    if (paramValue.IsNumber())
                    {
                        paramMessage = paramMessage.Replace("'", "");
                    }
                    logMessage.Append(paramMessage);
                }

                if (_logManagerFactory != null)
                {
                    var sqlLog = _logManagerFactory.GetLogger("LinqToExcel.SQL");
                    sqlLog.Debug(logMessage.ToString());
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Executes the sql query and returns the data results
        /// </summary>
        /// <typeparam name="T">Data type in the main from clause (queryModel.MainFromClause.ItemType)</typeparam>
        /// <param name="queryModel">Linq query model</param>
        protected IEnumerable <object> GetDataResults(SqlParts sql, QueryModel queryModel)
        {
            IEnumerable <object> results;
            OleDbDataReader      data = null;

            var conn = ExcelUtilities.GetConnection(_args);

            using (var command = conn.CreateCommand())
            {
                if (conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }
                command.CommandText = sql.ToString();
                command.Parameters.AddRange(sql.Parameters.ToArray());
                try { data = command.ExecuteReader(); }
                catch (OleDbException e)
                {
                    if (e.Message.Contains(_args.WorksheetName))
                    {
                        throw new DataException(
                                  string.Format("'{0}' is not a valid worksheet name. Valid worksheet names are: '{1}'",
                                                _args.WorksheetName, string.Join("', '", ExcelUtilities.GetWorksheetNames(_args.FileName).ToArray())));
                    }
                    if (!CheckIfInvalidColumnNameUsed(sql))
                    {
                        throw e;
                    }
                }

                var columns = ExcelUtilities.GetColumnNames(data);
                LogColumnMappingWarnings(columns);
                if (columns.Count() == 1 && columns.First() == "Expr1000")
                {
                    results = GetScalarResults(data);
                }
                else if (queryModel.MainFromClause.ItemType == typeof(Row))
                {
                    results = GetRowResults(data, columns);
                }
                else if (queryModel.MainFromClause.ItemType == typeof(RowNoHeader))
                {
                    results = GetRowNoHeaderResults(data);
                }
                else
                {
                    results = GetTypeResults(data, columns, queryModel);
                }
            }

            if (_args.PersistentConnection == null)
            {
                conn.Dispose();
            }

            return(results);
        }
Esempio n. 3
0
        /// <summary>
        /// Executes the sql query and returns the data results
        /// </summary>
        /// <typeparam name="T">Data type in the main from clause (queryModel.MainFromClause.ItemType)</typeparam>
        /// <param name="queryModel">Linq query model</param>
        protected IEnumerable <object> GetDataResults(SqlParts sql, QueryModel queryModel)
        {
            IEnumerable <object> results;
            OleDbDataReader      data = null;

            var conn    = ExcelUtilities.GetConnection(this.args);
            var command = conn.CreateCommand();

            try
            {
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }

                command.CommandText = sql.ToString();
                command.Parameters.AddRange(sql.Parameters.ToArray());
                try
                {
                    data = command.ExecuteReader();
                }
                catch (OleDbException e)
                {
                    if (e.Message.Contains(this.args.WorksheetName))
                    {
                        throw new DataException(
                                  string.Format(
                                      "'{0}' is not a valid worksheet name in file {3}. Valid worksheet names are: '{1}'. Error received: {2}",
                                      this.args.WorksheetName,
                                      string.Join("', '", ExcelUtilities.GetWorksheetNames(this.args.FileName).ToArray()), e.Message,
                                      this.args.FileName), e);
                    }
                    if (!this.CheckIfInvalidColumnNameUsed(sql))
                    {
                        throw;
                    }
                }

                var columns    = ExcelUtilities.GetColumnNames(data);
                var enumerable = columns as string[] ?? columns.ToArray();
                this.LogColumnMappingWarnings(enumerable);
                if (enumerable.Length == 1 && enumerable.First() == "Expr1000")
                {
                    results = this.GetScalarResults(data);
                }
                else if (queryModel.MainFromClause.ItemType == typeof(Row))
                {
                    results = this.GetRowResults(data, enumerable);
                }
                else if (queryModel.MainFromClause.ItemType == typeof(RowNoHeader))
                {
                    results = this.GetRowNoHeaderResults(data);
                }
                else
                {
                    results = this.GetTypeResults(data, enumerable, queryModel);
                }
            }
            finally
            {
                command.Dispose();

                if (!this.args.UsePersistentConnection)
                {
                    conn.Dispose();
                    this.args.PersistentConnection = null;
                }
            }

            return(results);
        }