/// <summary> /// 获取Ado.Net Connection/Transaction Pair from the given connectionString /// </summary> /// <param name="connString">连接字符串</param> /// <returns>A Connection/Transaction Pair</returns> public ConnectionTxPair GetConnectionTxPair(string connString) { DbProvider.ConnectionString = connString; ConnectionTxPair connectionTxPair = ConnectionUtils.GetConnectionTxPair(DbProvider); return(connectionTxPair); }
/// <summary> /// 针对<see cref="System.Data.IDbConnection"/>执行<see cref="System.Data.IDbCommand.CommandText"/>,并生成 /// <see cref="System.Data.IDataReader"/> /// </summary> /// <param name="connString">A ConnectionString.</param> /// <param name="commandType">the CommandType.</param> /// <param name="commandText">A execute Sql.</param> /// <param name="timeoutInSeconds">the dbcommand timeout.</param> /// <param name="parameterValues">the sql parameters.</param> /// <returns>a datareader.</returns> public IDataReader ExecuteReader(string connString, CommandType commandType, string commandText, int timeoutInSeconds, IDbParameters parameterValues) { AssertUtils.StringNotNullOrEmpty(connString, "connString"); ConnectionTxPair connectionTxPair = GetConnectionTxPair(connString); try { IDbCommand dbCommand = DbProvider.CreateCommand(); PrepareCommand(dbCommand, connectionTxPair.Connection, connectionTxPair.Transaction, commandType, commandText, parameterValues); ApplyTransactionTimeout(dbCommand, timeoutInSeconds); IDataReader executeReader = dbCommand.ExecuteReader(); ParameterUtils.CopyParameters(parameterValues, dbCommand); return(executeReader); } catch (Exception) { ConnectionUtils.DisposeConnection(connectionTxPair.Connection, DbProvider); connectionTxPair.Connection = null; throw; } finally { //ConnectionUtils.DisposeConnection(connectionTxPair.Connection, DbProvider); } }
/// <summary> /// 执行SQL,并返回影响的行数 /// </summary> /// <param name="connString">A ConnectionString.</param> /// <param name="commandType">the Sql CommandType.</param> /// <param name="commandText">the execute Sql.</param> /// <param name="timeOutInSeconds">the dbcommand timeout.</param> /// <param name="parameters">the sql parameters.</param> /// <returns>返回受影响的行数.</returns> public int ExecuteNonQuery(string connString, CommandType commandType, string commandText, int timeOutInSeconds, IDbParameters parameters) { AssertUtils.StringNotNullOrEmpty(connString, "connString"); ConnectionTxPair connectionTxPair = GetConnectionTxPair(connString); try { using (IDbCommand dbCommand = DbProvider.CreateCommand()) { PrepareCommand(dbCommand, connectionTxPair.Connection, connectionTxPair.Transaction, CommandType.Text, commandText, parameters); ApplyTransactionTimeout(dbCommand, timeOutInSeconds); int rowCount = dbCommand.ExecuteNonQuery(); ParameterUtils.CopyParameters(parameters, dbCommand); return(rowCount); } } catch (Exception ex) { ConnectionUtils.DisposeConnection(connectionTxPair.Connection, DbProvider); connectionTxPair.Connection = null; throw ex; } finally { ConnectionUtils.DisposeConnection(connectionTxPair.Connection, DbProvider); } }
public System.Data.Common.DbDataReader QueryDataReader(string cmdText) { ConnectionTxPair connectionTxPairToUse = GetConnectionTxPair(DbProvider); IDbCommand command = null; System.Data.Common.DbDataReader reader = null; try { command = DbProvider.CreateCommand(); command.Connection = connectionTxPairToUse.Connection; command.Transaction = connectionTxPairToUse.Transaction; ApplyCommandSettings(command); DbCommand commandToUse = command as DbCommand; if (commandToUse != null) { command.CommandText = cmdText; reader = base.CreateDataReaderWrapper(command.ExecuteReader()) as System.Data.Common.DbDataReader; return(reader); } else { throw new InvalidDataAccessApiUsageException("IDbCommand 通过DbProvider创建的command不能转换为DbCommand"); } } catch (Exception e) { DisposeCommand(command); command = null; DisposeConnection(connectionTxPairToUse.Connection, DbProvider); connectionTxPairToUse.Connection = null; throw; } finally { DisposeCommand(command); DisposeConnection(connectionTxPairToUse.Connection, DbProvider); Spring.Data.Support.AdoUtils.CloseReader(reader); } }
/// <summary> /// 执行SQL, 返回Dataset /// </summary> /// <param name="connString">the ConnectionString</param> /// <param name="commandType">the sql CommandType.</param> /// <param name="commandText">the execute sql</param> /// <param name="timeoutInSeconds">the dbcommand timeout.</param> /// <param name="parameterValues">the sql parameters</param> /// <returns>return a Dataset</returns> /// <exception cref="ArgumentNullException">如果参数connString为null或空,则抛出此异常</exception> public DataSet ExecuteDataset(string connString, CommandType commandType, string commandText, int timeoutInSeconds, IDbParameters parameterValues) { AssertUtils.StringNotNullOrEmpty(connString, "connString"); ConnectionTxPair connectionTxPair = GetConnectionTxPair(connString); try { using (IDbCommand dbCommand = DbProvider.CreateCommand()) { PrepareCommand(dbCommand, connectionTxPair.Connection, connectionTxPair.Transaction, commandType, commandText, parameterValues); ApplyTransactionTimeout(dbCommand, timeoutInSeconds); IDbDataAdapter dbDataAdapter = DbProvider.CreateDataAdapter(); dbDataAdapter.SelectCommand = dbCommand; var ds = new DataSet(); dbDataAdapter.Fill(ds); ParameterUtils.CopyParameters(parameterValues, dbCommand); return(ds); } } catch (Exception) { ConnectionUtils.DisposeConnection(connectionTxPair.Connection, DbProvider); connectionTxPair.Connection = null; throw; } finally { ConnectionUtils.DisposeConnection(connectionTxPair.Connection, DbProvider); } }
protected virtual Dictionary <string, DataTable> BuildDatabase(IDictionary <string, Table> tables, SpringBaseDao baseDao, out bool createdDatabase) { createdDatabase = false; ConnectionTxPair connectionTxPairToUse = null; try { connectionTxPairToUse = ConnectionUtils.GetConnectionTxPair(baseDao.DbProvider); ConnectionUtils.DisposeConnection(connectionTxPairToUse.Connection, baseDao.DbProvider); connectionTxPairToUse = null; return(GetCurrentDatabaseTableSchemas(tables, baseDao)); } catch (CannotGetAdoConnectionException) { // Database probably does not exist, so attempt to create it below } finally { if (connectionTxPairToUse != null) { ConnectionUtils.DisposeConnection(connectionTxPairToUse.Connection, baseDao.DbProvider); connectionTxPairToUse = null; } } string saveConnectionString = baseDao.DbProvider.ConnectionString; string databaseName; string newConnectionString = SpringBaseDao.RemoveDatabaseFromConnectionString(baseDao.DbProvider, out databaseName); if (string.IsNullOrEmpty(databaseName)) { throw new ArgumentException(string.Format("Could not locate database name in connection string: \"{0}\"", baseDao.DbProvider.ConnectionString)); } baseDao.DbProvider.ConnectionString = newConnectionString; try { connectionTxPairToUse = ConnectionUtils.GetConnectionTxPair(baseDao.DbProvider); string sql = string.Format("CREATE DATABASE {0}", databaseName); baseDao.AdoTemplate.ExecuteNonQuery(CommandType.Text, sql); createdDatabase = true; } finally { if (connectionTxPairToUse != null) { ConnectionUtils.DisposeConnection(connectionTxPairToUse.Connection, baseDao.DbProvider); connectionTxPairToUse = null; } baseDao.DbProvider.ConnectionString = saveConnectionString; } // Wait for database to be fully created long timeoutTicks = DateTime.Now.Ticks + TimeSpan.FromSeconds(CREATE_DATABASE_WAIT_SECONDS).Ticks; do { try { return(GetCurrentDatabaseTableSchemas(tables, baseDao)); } catch (DataAccessException) { } Thread.Sleep(300); }while (timeoutTicks > DateTime.Now.Ticks); throw new CannotGetAdoConnectionException(); }
/// <summary> /// Gets the non managed TX connection. /// </summary> /// <returns></returns> protected override ConnectionAndTransactionHolder GetNonManagedTXConnection() { ConnectionTxPair pair = ConnectionUtils.DoGetConnection(dbProvider); return(new ConnectionAndTransactionHolder(pair.Connection, pair.Transaction)); }