Beispiel #1
0
            internal void Retry(Task <DbConnectionInternal> retryTask)
            {
                _registration.Dispose();
                try
                {
                    SqlStatistics statistics = null;
                    try
                    {
                        statistics = SqlStatistics.StartTimer(_parent.Statistics);

                        if (retryTask.IsFaulted)
                        {
                            Exception e = retryTask.Exception.InnerException;
                            _parent.CloseInnerConnection();
                            _parent._currentCompletion = null;
                            _result.SetException(retryTask.Exception.InnerException);
                        }
                        else if (retryTask.IsCanceled)
                        {
                            _parent.CloseInnerConnection();
                            _parent._currentCompletion = null;
                            _result.SetCanceled();
                        }
                        else
                        {
                            bool result;
                            // protect continuation from races with close and cancel
                            lock (_parent.InnerConnection)
                            {
                                result = _parent.TryOpen(_retry);
                            }
                            if (result)
                            {
                                _parent._currentCompletion = null;
                                _result.SetResult(null);
                            }
                            else
                            {
                                _parent.CloseInnerConnection();
                                _parent._currentCompletion = null;
                                _result.SetException(ADP.ExceptionWithStackTrace(ADP.InternalError(ADP.InternalErrorCode.CompletedConnectReturnedPending)));
                            }
                        }
                    }
                    finally
                    {
                        SqlStatistics.StopTimer(statistics);
                    }
                }
                catch (Exception e)
                {
                    _parent.CloseInnerConnection();
                    _parent._currentCompletion = null;
                    _result.SetException(e);
                }
            }
Beispiel #2
0
        public void BatchExcute(BulkCopyModel bulkCopyModel, params sql.SqlCommand[] commands)   //IContextInfo contextInfo,
        {
            if (commands?.Length < 1)
            {
                return;
            }

            using (var connection = new sql.SqlConnection(_connectionString))
            {
                //connection.StateChange += new System.Data.StateChangeEventHandler((sender, e) =>
                //{
                //    if (e.CurrentState == System.Data.ConnectionState.Open)
                //        setContextInfo(connection, contextInfo);

                //});

                connection.TryOpen();
                using (var tran = connection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted))
                {
                    try
                    {
                        foreach (var command in commands)
                        {
                            command.Connection  = connection;
                            command.Transaction = tran;
                            command.ExecuteNonQuery();
                        }

                        using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, tran))
                        {
                            bulkCopy.BatchSize            = bulkCopyModel.BatchSize; // ~ 100
                            bulkCopy.DestinationTableName = bulkCopyModel.TableName;
                            if (bulkCopyModel.ColumnMappings != null)
                            {
                                bulkCopyModel.ColumnMappings.ForEach(c => bulkCopy.ColumnMappings.Add(c));
                            }
                            var dataTable = bulkCopyModel.DataTable;
                            bulkCopy.BulkCopyTimeout = bulkCopyModel.Timeout;
                            bulkCopy.WriteToServer(dataTable);
                        }

                        tran.Commit();
                    }
                    catch (Exception e)
                    {
                        tran.Rollback();
                        throw e;
                    }
                    finally
                    {
                        //clearContextInfo(connection, contextInfo);
                        connection.TryClose();
                    }
                }
            }
        }
Beispiel #3
0
        protected System.Data.DataSet Execute(sql.SqlCommand command)   //, IContextInfo contextInfo
        {
            var dataSet = new System.Data.DataSet();

            using (var connection = new sql.SqlConnection(_connectionString))
            {
                //connection.StateChange += new System.Data.StateChangeEventHandler((sender, e) =>
                //{
                //    if (e.CurrentState == System.Data.ConnectionState.Open)
                //        setContextInfo(connection, contextInfo);

                //});

                command.Connection = connection;

                connection.TryOpen();

                using (var reader = command.ExecuteReader())
                {
                    do
                    {
                        if (reader.HasRows && reader.FieldCount > 0)
                        {
                            using (var table = dataSet.Tables.Add())
                            {
                                table.Load(reader);
                                dataSet.Tables.Add(table);
                            }
                        }
                        else
                        {
                            reader.Close();
                        }
                    }while (!reader.IsClosed);
                }

                //clearContextInfo(connection, contextInfo);
                connection.TryClose();
            }



            return(dataSet);
        }
Beispiel #4
0
        public void BatchExcute(params sql.SqlCommand[] commands)   //IContextInfo contextInfo,
        {
            if (commands?.Length < 1)
            {
                return;
            }

            using (var connection = new sql.SqlConnection(_connectionString))
            {
                //connection.StateChange += new System.Data.StateChangeEventHandler((sender, e) =>
                //{
                //    if (e.CurrentState == System.Data.ConnectionState.Open)
                //        setContextInfo(connection, contextInfo);

                //});

                connection.TryOpen();
                using (var tran = connection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted))
                {
                    try
                    {
                        foreach (var command in commands)
                        {
                            command.Connection  = connection;
                            command.Transaction = tran;
                            command.ExecuteNonQuery();
                        }

                        tran.Commit();
                    }
                    catch (Exception e)
                    {
                        tran.Rollback();
                        throw e;
                    }
                    finally
                    {
                        //clearContextInfo(connection, contextInfo);
                        connection.TryClose();
                    }
                }
            }
        }
Beispiel #5
0
        private DataTable loadData(string query)
        {
            var table = new DataTable();

            using (var connection = new q.SqlConnection(_connectionString))
            {
                connection.TryOpen();

                using (var command = connection.CreateCommand())
                {
                    command.CommandText = query;
                    using (var reader = command.ExecuteReader())
                    {
                        table.Load(reader);
                        reader.Close();
                    }
                }

                connection.TryClose();
            }

            return(table);
        }