/// <summary> /// Executes the command text against the connection. /// </summary> /// <returns> /// A task representing the operation. /// </returns> /// <param name="behavior">An instance of <see cref="T:System.Data.CommandBehavior"/>.</param><exception cref="T:System.Data.Common.DbException">An error occurred while executing the command text.</exception><exception cref="T:System.ArgumentException">An invalid <see cref="T:System.Data.CommandBehavior"/> value.</exception> protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior) { var channel = m_connection.BeginExecuteCommand(this); try { var dataRequest = CreateRequest(false, !behavior.HasFlag(CommandBehavior.SchemaOnly)); var response = SendCommand(channel, dataRequest, CreateRequestParams(), null); var streamHolder = PqlDataConnection.ReaderStreams.Take(m_connection.CancellationTokenSource.Token); try { streamHolder.Item.Attach(response.Stream); return(new PqlDataReader(m_connection, streamHolder.Item, streamHolder, response)); } catch { streamHolder.Dispose(); response.Close(); throw; } } catch { m_connection.ConfirmExecutionCompletion(false); throw; } }
/// <summary>关闭读取器</summary> public override void Close() { if (_behavior.HasFlag(CommandBehavior.CloseConnection)) { _command.Connection.Close(); } if (_handler != IntPtr.Zero) { TD.FreeResult(_handler); } _handler = IntPtr.Zero; }
public static XmlDocument QueryXml( this SqlConnection connection, string sql, object parameters = null, CommandType commandType = CommandType.StoredProcedure, CommandBehavior commandBehavior = CommandBehavior.Default, int?commandTimeout = null, IDbTransaction transaction = null, object outputParameters = null) { return(connection.ExecuteAndAutoClose( c => { using (var cmd = (SqlCommand)c.CreateCommand(sql, parameters, commandType, commandTimeout, transaction)) { cmd.OutputParameters(outputParameters); return cmd.ExecuteXml(); } }, commandBehavior.HasFlag(CommandBehavior.CloseConnection))); }
public static XmlDocument QueryXml( this SqlConnection connection, string sql, object parameters = null, CommandType commandType = CommandType.StoredProcedure, CommandBehavior commandBehavior = CommandBehavior.Default, int? commandTimeout = null, IDbTransaction transaction = null, object outputParameters = null) { return connection.ExecuteAndAutoClose( c => { using (var cmd = (SqlCommand)c.CreateCommand(sql, parameters, commandType, commandTimeout, transaction)) { cmd.OutputParameters(outputParameters); return cmd.ExecuteXml(); } }, commandBehavior.HasFlag(CommandBehavior.CloseConnection)); }
public static SqlDataReader ExecuteReader( this string connectionString, string commandText, int commandTimeoutInSeconds = 30, IReadOnlyList<SqlParameter> commandParameters = null, CommandType commandType = CommandType.Text, CommandBehavior commandBehavior = CommandBehavior.CloseConnection, bool prepareCommand = false, SqlInfoMessageEventHandler sqlInfoMessageEventHandler = null) { if (!commandBehavior.HasFlag(CommandBehavior.CloseConnection)) { throw new ArgumentException(Invariant($"{nameof(commandBehavior)} does not set the flag {CommandBehavior.CloseConnection}. This will result in an open connection with the caller having no means of closing it.")); } var connection = OpenSqlConnection(connectionString, sqlInfoMessageEventHandler); var result = connection.ExecuteReader(commandText, commandTimeoutInSeconds, commandParameters, commandType, null, commandBehavior, prepareCommand); return result; }
public PostgresDbDataReader( CommandBehavior behavior, PostgresDbConnectionBase connection, PostgresCommand command, CancellationToken cancellationToken) { _behavior = behavior; _connection = connection; _command = command; _cancellationToken = cancellationToken; _behaviorCloseConnection = behavior .HasFlag(CommandBehavior.CloseConnection); _behaviorKeyInfo = behavior .HasFlag(CommandBehavior.KeyInfo); _behaviorSchemaOnly = behavior .HasFlag(CommandBehavior.SchemaOnly); _behaviorSequentialAccess = behavior .HasFlag(CommandBehavior.SequentialAccess); _behaviorSinglaResult = behavior .HasFlag(CommandBehavior.SingleResult); _behaviorSingleRow = behavior .HasFlag(CommandBehavior.SingleRow); }
private bool IsCommandBehavior(CommandBehavior behavior) { return(_commandBehavior.HasFlag(behavior)); }
/// <summary> /// Executes the command text against the connection. /// </summary> /// <returns> /// A task representing the operation. /// </returns> /// <param name="behavior">An instance of <see cref="T:System.Data.CommandBehavior"/>.</param><exception cref="T:System.Data.Common.DbException">An error occurred while executing the command text.</exception><exception cref="T:System.ArgumentException">An invalid <see cref="T:System.Data.CommandBehavior"/> value.</exception> protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior) { var channel = m_connection.BeginExecuteCommand(this); try { var dataRequest = CreateRequest(false, !behavior.HasFlag(CommandBehavior.SchemaOnly)); var response = SendCommand(channel, dataRequest, CreateRequestParams(), null); var streamHolder = PqlDataConnection.ReaderStreams.Take(m_connection.CancellationTokenSource.Token); try { streamHolder.Item.Attach(response.Stream); return new PqlDataReader(m_connection, streamHolder.Item, streamHolder, response); } catch { streamHolder.Dispose(); response.Close(); throw; } } catch { m_connection.ConfirmExecutionCompletion(false); throw; } }
protected async virtual Task CommandExecuteAsync(Random rnd, DbCommand com, bool query) { CancellationTokenSource cts = null; // Cancel 1/10 commands Task cancelTask = null; bool cancelCommand = rnd.NextBool(0.1); if (cancelCommand) { if (rnd.NextBool()) { // Use DbCommand.Cancel cancelTask = Task.Run(() => CommandCancel(com)); } else { // Use CancellationTokenSource if (cts == null) { cts = new CancellationTokenSource(); } cancelTask = Task.Run(() => cts.Cancel()); } } // Get the CancellationToken CancellationToken token = (cts != null) ? cts.Token : CancellationToken.None; DataStressReader reader = null; try { if (query) { CommandBehavior commandBehavior = CommandBehavior.Default; if (rnd.NextBool(0.5)) { commandBehavior |= CommandBehavior.SequentialAccess; } if (rnd.NextBool(0.25)) { commandBehavior |= CommandBehavior.KeyInfo; } if (rnd.NextBool(0.1)) { commandBehavior |= CommandBehavior.SchemaOnly; } // Get the reader reader = new DataStressReader(await com.ExecuteReaderSyncOrAsync(commandBehavior, token, rnd)); // Consume the reader's data await ConsumeReaderAsync(reader, commandBehavior.HasFlag(CommandBehavior.SequentialAccess), token, rnd); } else { await com.ExecuteNonQuerySyncOrAsync(token, rnd); } } catch (Exception e) { if (cancelCommand && IsCommandCancelledException(e)) { // Catch command canceled exception } else { throw; } } finally { if (cancelTask != null) { AsyncUtils.WaitAndUnwrapException(cancelTask); } if (reader != null && ShouldCloseDataReader()) { reader.Close(); } } }