Jacek Salamon

Jacek Salamon Programista

Temat: Dostęp sekwencyjny do bloba w Fajerberdzie przez ADO.NET

Witam

Mam taki problem:
Chcę pobierać z bazy danych Firebirda plik zawarty w polu BLOB, ale nie w całości tylko po kawałku, tak żeby w trakcie pobierania pliku aktualizować pasek postępu. W Internecie znalazłem wskazówkę, że należy zrobić tak:


FbDataReader rd = retrieveFileCmd.ExecuteReader(CommandBehavior.SequentialAccess);


Wtedy za pomocą metody rd.GetBytes pobiera się nie całego BLOBa na raz, tylko po kawałku. Tak jak to opisano np. tu:
http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.adonet/topic24541.aspx

lub tu:

http://www.akadia.com/services/dotnet_read_write_blob.html

Problem w tym, że u mnie BLOB pobiera się w całości, a następnie dopiero metoda GetBytes pobiera z tej pobranej całości kawałki. Podobno parametr CommandBehavior.SequentialAccess nie działa w przypadku wszystkich dostawców danych. Jak to jest z Firebirdem? Czy to zależy od architektury bazy danych czy od wersji biblioteki Firebirda dla .NET?
Jacek Salamon

Jacek Salamon Programista

Temat: Dostęp sekwencyjny do bloba w Fajerberdzie przez ADO.NET

Dobra, już wiem jak to zrobić.

Przerobiłem trochę bibliotekę Firebirda dla ADO.NET. Konkretnie w klasie BlobBase w metodzie Read() dodałem eventa, który przesyła dane pobranego segmentu i liczbę pobranych bajtów do subskrybującej go funkcji. Zmieniłem też trochę klasę FbDataReader. Teraz można zrobić coś takiego:
rd.SegmentReceived += 
new FbDataReader.SegmentReceivedDelegate(rd_SegmentReceived);

Myślę, że to całkiem przydatne.

Następna dyskusja:

Prosze o pomoc - ListBox AD...




Wyślij zaproszenie do