public override byte[] GetSlice(int sliceLength) { ClearStatusVector(); var dbHandle = _db.HandlePtr; var trHandle = _transaction.HandlePtr; var arrayDesc = ArrayDescMarshaler.MarshalManagedToNative(Descriptor); var buffer = new byte[sliceLength]; _db.FbClient.isc_array_get_slice( _statusVector, ref dbHandle, ref trHandle, ref _handle, arrayDesc, buffer, ref sliceLength); ArrayDescMarshaler.CleanUpNativeData(ref arrayDesc); _db.ProcessStatusVector(_statusVector); return(buffer); }
public override void BeginTransaction(TransactionParameterBuffer tpb) { if (State != TransactionState.NoTransaction) { throw new InvalidOperationException(); } var teb = new IscTeb(); var tebData = IntPtr.Zero; try { ClearStatusVector(); teb.dbb_ptr = Marshal.AllocHGlobal(4); Marshal.WriteInt32(teb.dbb_ptr, _db.Handle); teb.tpb_len = tpb.Length; teb.tpb_ptr = Marshal.AllocHGlobal(tpb.Length); Marshal.Copy(tpb.ToArray(), 0, teb.tpb_ptr, tpb.Length); var size = Marshal.SizeOf <IscTeb>(); tebData = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(teb, tebData, true); _db.FbClient.isc_start_multiple( _statusVector, ref _handle, 1, tebData); _db.ProcessStatusVector(_statusVector); State = TransactionState.Active; _db.TransactionCount++; } finally { if (teb.dbb_ptr != IntPtr.Zero) { Marshal.FreeHGlobal(teb.dbb_ptr); } if (teb.tpb_ptr != IntPtr.Zero) { Marshal.FreeHGlobal(teb.tpb_ptr); } if (tebData != IntPtr.Zero) { Marshal.DestroyStructure <IscTeb>(tebData); Marshal.FreeHGlobal(tebData); } } }
protected override void Create() { ClearStatusVector(); var dbHandle = _db.HandlePtr; var trHandle = ((FesTransaction)_transaction).HandlePtr; _db.FbClient.isc_create_blob2( _statusVector, ref dbHandle, ref trHandle, ref _blobHandle, ref _blobId, 0, new byte[0]); _db.ProcessStatusVector(_statusVector); RblAddValue(IscCodes.RBL_create); }
public override void Prepare(string commandText) { ClearAll(); ClearStatusVector(); if (State == StatementState.Deallocated) { Allocate(); } _fields = new Descriptor(1); var sqlda = XsqldaMarshaler.MarshalManagedToNative(_db.Charset, _fields); var trHandle = _transaction.HandlePtr; var buffer = _db.Charset.GetBytes(commandText); _db.FbClient.isc_dsql_prepare( _statusVector, ref trHandle, ref _handle, (short)buffer.Length, buffer, _db.Dialect, sqlda); var descriptor = XsqldaMarshaler.MarshalNativeToManaged(_db.Charset, sqlda); XsqldaMarshaler.CleanUpNativeData(ref sqlda); _db.ProcessStatusVector(_statusVector); _fields = descriptor; if (_fields.ActualCount > 0 && _fields.ActualCount != _fields.Count) { Describe(); } else { if (_fields.ActualCount == 0) { _fields = new Descriptor(0); } } _fields.ResetValues(); DescribeParameters(); StatementType = GetStatementType(); State = StatementState.Prepared; }