예제 #1
0
        async Task <object> ExecCmdImplLogged(OneConn oc, SqlCommandData data, CancellationToken ct)
        {
            var sbSql = new System.Text.StringBuilder(data.SqlText);

            sbSql.Replace('\r', ' ').Replace('\n', ' ');
            int L;

            do
            {
                L = sbSql.Length;
                sbSql.Replace("  ", " ");
            } while (L != sbSql.Length);

            var sw = new System.Diagnostics.Stopwatch();

            sw.Start();
            try
            {
                var res = await ExecCmdImpl(oc, data, ct);

                var lst = res as IList;
                sbSql.Insert(0, string.Format("{0}\t{1}\t", sw.ElapsedMilliseconds, (lst == null) ? -1 : lst.Count));
                Diagnostics.Logger.TraceEvent(System.Diagnostics.TraceEventType.Information, 1, sbSql.ToString());
                //System.Diagnostics.Trace.WriteLine(sbSql.ToString());
                return(res);
            }
            catch (DbException ex)
            {
                sbSql.Insert(0, string.Format("{0}\tERR\t", ex.Message));
                Diagnostics.Logger.TraceEvent(System.Diagnostics.TraceEventType.Error, 1, sbSql.ToString());
                throw;
            }
        }
예제 #2
0
        OneConn Pool(int i)
        {
            var c = _pool[i];

            if (c == null)
            {
                c = new OneConn()
                {
                    conn = dbms.GetConnection(connString)
                };
                try { c.conn.Open(); }
                catch (Exception ex) { throw ex; }
                if (initCmds.Length > 0)
                {
                    using (var cmd = c.conn.CreateCommand())
                    {
                        foreach (var initCmd in initCmds)
                        {
                            cmd.CommandText = initCmd;
                            cmd.ExecuteNonQuery();
                        }
                    }
                }
                _pool[i] = c;
            }
            return(c);
        }
예제 #3
0
        async Task <object> ExecCmdImpl(OneConn oc, SqlCommandData data, CancellationToken ct)
        {
            int sum = 0;

            foreach (var dbCmd in dbms.GetSpecificCommands(oc.conn, data))
            {
                using (dbCmd)
                    try
                    {
                        dbCmd.Transaction = oc.GetTransaction(autoCommitPeriod);
                        try
                        {
                            dbCmd.CommandText = data.SqlText;
                            if (data.Kind == CommandKind.NonQuery)
                            {   // For MS SQL can be multiple INSERT commands due rows count limitation in one INSERT
                                sum += dbCmd.ExecuteNonQuery();
                                continue;
                            }
                        }
                        catch (Exception ex) { throw ex; }

                        if (data.Kind == CommandKind.GetSchema)
                        {
                            using (var rdr = dbCmd.ExecuteReader(System.Data.CommandBehavior.SchemaOnly))
                                return(rdr.GetSchemaTable());
                        }
                        using (var rdr = dbCmd.ExecuteReader())// (await SafeGetRdr(oraCmd, ct))
                        {
                            if (data.ConvertMultiResultsToLists)
                            {
                                return(ReadGroupedRows(rdr));
                            }
                            return(ReadRows(rdr));
                        }
                    }
                    finally { oc.Commit(); }
            }

            return(sum); // return from NonQuery
            //throw new InvalidOperationException("You re not supposed to be here)");
        }