Esempio n. 1
0
    public async Task ConnectAsync(CancellationToken cancellationToken = default)
    {
        if (Charset.GetCharset(_options.Charset) == null)
        {
            throw FbException.Create("Invalid character set specified");
        }

        try
        {
            _db = await ClientFactory.CreateDatabaseAsync(_options, cancellationToken).ConfigureAwait(false);

            _db.Charset    = Charset.GetCharset(_options.Charset);
            _db.Dialect    = _options.Dialect;
            _db.PacketSize = _options.PacketSize;

            var dpb = BuildDpb(_db, _options);

            if (string.IsNullOrEmpty(_options.UserID) && string.IsNullOrEmpty(_options.Password))
            {
                await _db.AttachWithTrustedAuthAsync(dpb, _options.Database, _options.CryptKey, cancellationToken).ConfigureAwait(false);
            }
            else
            {
                await _db.AttachAsync(dpb, _options.Database, _options.CryptKey, cancellationToken).ConfigureAwait(false);
            }
        }
        catch (IscException ex)
        {
            throw FbException.Create(ex);
        }
    }
Esempio n. 2
0
    public async Task CreateDatabaseAsync(int pageSize, bool forcedWrites, bool overwrite, CancellationToken cancellationToken = default)
    {
        var db = await ClientFactory.CreateDatabaseAsync(_options, cancellationToken).ConfigureAwait(false);

        var dpb = db.CreateDatabaseParameterBuffer();

        dpb.Append(IscCodes.isc_dpb_dummy_packet_interval, new byte[] { 120, 10, 0, 0 });
        dpb.Append(IscCodes.isc_dpb_sql_dialect, new byte[] { _options.Dialect, 0, 0, 0 });
        if (!string.IsNullOrEmpty(_options.UserID))
        {
            dpb.Append(IscCodes.isc_dpb_user_name, _options.UserID);
        }
        if (_options.Charset.Length > 0)
        {
            var charset = Charset.GetCharset(_options.Charset);
            if (charset == null)
            {
                throw new ArgumentException("Character set is not valid.");
            }
            else
            {
                dpb.Append(IscCodes.isc_dpb_set_db_charset, charset.Name);
            }
        }
        dpb.Append(IscCodes.isc_dpb_force_write, (short)(forcedWrites ? 1 : 0));
        dpb.Append(IscCodes.isc_dpb_overwrite, (overwrite ? 1 : 0));
        if (pageSize > 0)
        {
            dpb.Append(IscCodes.isc_dpb_page_size, pageSize);
        }

        try
        {
            if (string.IsNullOrEmpty(_options.UserID) && string.IsNullOrEmpty(_options.Password))
            {
                await db.CreateDatabaseWithTrustedAuthAsync(dpb, _options.Database, _options.CryptKey, cancellationToken).ConfigureAwait(false);
            }
            else
            {
                await db.CreateDatabaseAsync(dpb, _options.Database, _options.CryptKey, cancellationToken).ConfigureAwait(false);
            }
        }
        finally
        {
            await db.DetachAsync(cancellationToken).ConfigureAwait(false);
        }
    }
Esempio n. 3
0
    public async Task DropDatabaseAsync(CancellationToken cancellationToken = default)
    {
        var db = await ClientFactory.CreateDatabaseAsync(_options, cancellationToken).ConfigureAwait(false);

        try
        {
            if (string.IsNullOrEmpty(_options.UserID) && string.IsNullOrEmpty(_options.Password))
            {
                await db.AttachWithTrustedAuthAsync(BuildDpb(db, _options), _options.Database, _options.CryptKey, cancellationToken).ConfigureAwait(false);
            }
            else
            {
                await db.AttachAsync(BuildDpb(db, _options), _options.Database, _options.CryptKey, cancellationToken).ConfigureAwait(false);
            }
            await db.DropDatabaseAsync(cancellationToken).ConfigureAwait(false);
        }
        finally
        {
            await db.DetachAsync(cancellationToken).ConfigureAwait(false);
        }
    }