示例#1
0
        internal static bool TryGetProviderForTransaction(IDbTransaction trans, out IDatabaseAccessProvider provider)
        {
            string databaseName;

            databaseName = trans.Connection.Database.ToUpperInvariant();
            return(TryGetProviderForTransaction(trans, databaseName, out provider));
        }
        private static void InnerExecuteQuery <T>(GenericRecordList <T> rl, IDbCommand command, string description, bool transformParameters) where T : ITypedRecord <T>
        {
            IDbCommand cmd = ADOAdaptersUtils.GetADOCommand(command);
            IDatabaseAccessProvider provider = DatabaseAccess.GetProviderForTransaction(cmd.Transaction);

            provider.ExecuteQuery(new ManagedCommand(provider.TransactionManager, cmd), rl, description, transformParameters, false);
        }
        public static IDataReader ExecuteReader(IDbCommand command, string description, bool isApplication, bool transformParameters, bool skipLog)
        {
            try {
                // Save the values before execution because sometimes the drivers clears them from the IDbCommand when an exception occurs
                IDbCommand     cmd   = ADOAdaptersUtils.GetADOCommand(command);
                IDbConnection  conn  = cmd.Connection;
                IDbTransaction trans = cmd.Transaction;

                IDatabaseAccessProvider provider = null;
                bool hasProvider = trans != null && DatabaseAccess.TryGetProviderForTransaction(trans, out provider);

                IExecutionService   executionService = hasProvider ? provider.DatabaseServices.ExecutionService : GetExecutionForConnection(conn);
                ITransactionManager manager          = provider.TransactionManager;

                IDataReader reader = null;
                try {
                    if (transformParameters)
                    {
                        TransformParameters(cmd);
                    }
                    reader = executionService.ExecuteReader(cmd);
                    // NOTE: This reader will be closed automatically by the transaction manager at the end of the request
                    manager.AssociateReader(trans, reader);
                } catch (DbException e) {
                    executionService.OnExecuteException(e, cmd, reader, conn, trans, manager);
                    throw;
                }
                return(reader);
            } catch (InvalidDatabaseAccessException e) {
                throw new InvalidDBTransactionManagerAccess(e.Message);
            }
        }
        public static DataSet CreateAndFillDataSet(IDbCommand command, IDbDataAdapter adapter, string description, bool isApplication)
        {
            // Save the values before execution because sometimes the drivers clears them from the IDbCommand when an exception occurs
            IDbCommand     cmd   = ADOAdaptersUtils.GetADOCommand(command);
            IDbConnection  conn  = cmd.Connection;
            IDbTransaction trans = cmd.Transaction;

            IDatabaseAccessProvider provider = null;
            bool hasProvider = trans != null && DatabaseAccess.TryGetProviderForTransaction(trans, out provider);

            IExecutionService   executionService = hasProvider ? provider.DatabaseServices.ExecutionService : GetExecutionForConnection(conn);
            ITransactionManager manager          = provider.TransactionManager;

            try {
                DataSet dataSet;

                {
                    dataSet = new DataSet();
                    adapter.SelectCommand = cmd;
                    adapter.Fill(dataSet);
                }
                return(dataSet);
            } catch (DbException e) {
                executionService.OnExecuteException(e, cmd, null, conn, trans, manager);
                throw;
            }
        }
示例#5
0
 internal DatabaseProvider(IDatabaseAccessProvider provider)
 {
     if (provider == null)
     {
         throw new ArgumentNullException("DatabaseProvider cannot be initialized with null.");
     }
     this.provider = provider;
 }
示例#6
0
 private static byte[] GetBinaryFromDb(string sql, string attributeName, IDatabaseAccessProvider dbAccessProvider)
 {
     using (Transaction trans = dbAccessProvider.GetReadOnlyTransaction()) {
         try {
             Command cmd = trans.CreateCommand(sql);
             using (IDataReader reader = cmd.ExecuteReader()) {
                 if ((reader.IsClosed) || (!reader.Read()))
                 {
                     return(null);
                 }
                 return(ReadBytes(reader, attributeName));
             }
         } catch (Exception) {
             return(null);
         }
     }
 }
 public static string EscapeAndQualifySqlIdentifier(IDatabaseAccessProvider <IPlatformDatabaseServices> provider, string objectName)
 {
     return(provider.DatabaseServices.DMLService.Identifiers.EscapeAndQualifyIdentifierForLocalDatabase(objectName));
 }
 /// <summary>
 /// Tries to get a database access based on the given transaction.
 /// </summary>
 /// <param name="trans">The transaction.</param>
 /// <param name="databaseName">Name of database to connect to.</param>
 /// <param name="provider">The object to access the database.</param>
 /// <returns><c>true</c> if the <c>DatabaseAccessProvider</c> could be created, <c>false</c> otherwise.</returns>
 internal static bool TryGetProviderForTransaction(IDbTransaction trans, string databaseName, out IDatabaseAccessProvider provider)
 {
     provider = Current.InnerGetProviderForTransaction(trans, databaseName);
     if (provider != null)
     {
         return(true);
     }
     provider = ForSystemDatabase;
     return(false);
 }