Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Вебмастеру -> Сеппа Д. -> "Microsoft ADO.NET" -> 224

Microsoft ADO.NET - Сеппа Д.

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 218 219 220 221 222 223 < 224 > 225 226 227 228 229 230 .. 260 >> Следующая

Dim го* As DataRow Dim strBlob As String
'Обращение к содержимому поля с текстовыми ВЮВ-дапными strBlob = CStr(row("TextBlob"))
'Редактирование содержимого поля с текстовыми BLOB-данными irow{ "Text Blob") = strBlob
520 Часть IV Создание эффективных приложений с использованием ADO.КЕТ
Visual C# .NET
DataRow row. string strBlob;
//Обраиениь к содержимому поля с текстовыми BL03-данными strBlob = (string) rowfTextBlob"];
//Редактирование содержимого поля с текстовыми BLOB-данными row["TextBlob"] = strBlob;
К полям с двоичными BLOB-данными обращаются точно также, как и к полям, содержащим двоичные данные меньшего объема.
Visual Basic .NET
Dim row As DataRow
Dim aBinaryBlob As Byte()
Обращение к содержимому оля с двоичными BLOB-данными aBinaryBlob = CType(row("BinaryBlob"). ByteO) 'Редактирование содержимого поля с двоичными BLOB-данными rowCBinaryBlob") - aBinaryBlob
Visual
DataRow
Byte[]aBinaryBlob;
//Обращение к содержимому поля с двоичными BLOB-данными aBinaryBlob = (Byte[]) row["BinaryBlob"];
содержимого поля с двоичными row["BlnaryBlob"] = aBinaryBlob;
Обработка с помощью объектов DataReader
Объект DataReader предоставляет .ои.тч рплтннс: обращаться сразу ко всему содержимому поля с Ш,( )[¦! дмнпыми или выбирать это содержимое по фрагментам.
Следующий фрагмент кода получает содержимое поля с BLOB-данными, один раз обратившись к объекту DataReader.
Visual Basic .НЕТ Dim As
¦Dim rdr As OleDbDataReader
'Dim intTextBlobColumnhlo, IntBlnaryBlobColumnNo As Integer
Dim strTextBlob As String Dim aBinaryBlob As ByteO
rdr = cmd. ExecuteHeader(CoMandBehavior. SequentiaiAccess)
'Do While rdr.Head
StrTextBlob = rdr.GetString(intTextBlobColumnNo) aBinaryBlob = CType(rdr{IntBlnaryBlobColumnNo), ByteO)
Loop
irdr. Close
ГЛАВА 13 Создание эффективных Windows-приложений 521
Visual C# .NET
OleObGominand cmd; OleDbDataReader rdr;
int IntTextBlobColumnNo, intBinaryBlobColumnNo; string strTextSlob; Byte[] aBlnaryBlob;
rdr = cmd. ExectJteReader(CornmandBehavior. SequentialAcoess); while (rdr.ReadQ)
{
strTextBlob = rdr.GetString(intTextBlobColumnHo); aBinaryBlob = (Byte[]) rdr[intBinaryBlobColumnNo];
I
rdr. Close()
Примечание Этот фрагмент кода получает содержимое поля с аехагсанайга 5I.CB-данными, используя метод GetSiriiif. со строгим контролем типов. Для получения же двоичных ! : .ч код неявно обращается к скУУ
ства Нет без контроля типов и затем преобразует возвращенное значение в байтовый массив. У объекта ШШтШ есть метод GetBytes, однако он нохиращаса1 данные Фрагментами, а не единым куском.
Размер ВЮВ-данных может быть очень большим. Хранить все содержимое поля с ВЮВ-данными в виде строки или байтового массива — не самая лучшая щ\а а особенно если поле содержит больше пары сотен мегабайт данных. Оптимальное решение для таких ситуаций — постепенно выбирать фрагменты ВЮВ-данных, записать содержимое поля на диск и затем обращаться к нему, когда это потребуется.
Объект DataReader предоставляет два метода, Ge'iiyU:i и GefCb?rs, позволяющих выбирать двоичные данные фрагментами. Следующий фрагмент кода с помощью метода GetBytes выбирает из объекта DataReader двоичные ВЮВ-данные фрагментами по 8 кбайт и записывает их в файл. Используя эту же логику, вы получите текстовые ВЮВ-данные с помощью метода
Visual Basic .NET
Добавьте в начало модуля кода следующую строку Imports System.10
Dim cmd As OleDbCommand
Dim rdr As OleDbDataReader
Dim intBlobColumnHo As Integer = 1
Dim intChunkSize As Integer = 8192
Dim intOffset As Integer = 0
Dim IntBytesReturned As Integer
Dim aBinaryBlob(intCiiunkSize) As Byte
Dim strPathToFile As String = "C:\GetBytes.jpg"
Dim filOutput As New FileStream(strPathToFile, FileHode.Create)
rdr = omd.ExecuteSaaderfCommandBehavior.SequentiaiAccess)
•2 гтт
522
Часть IV Создание эффективных приложений с использованием ADO net
rdr.ReadO
Do
intBytesReturned = CInt(rdr.GetBytes(intBlobColumnNo. intoffset,
aBinaryBlob. 0, intChunkSize))
If (intBytesReturned > 0) Then
filOutput.Write(aBinaryeiob, 0, intBytesReturned) End If
intoffset += intBytesReturned Doop Until intBytesaeturned о intChunkSize filOutput.Close() rdr.Close()
Visual C# -NET
//Добавьте в начало модуля кода следующую строку using System.10;
OleDbCommand cmd; OleDbDataReaderrdr; int intBinaryBlobCol = 1; int intChunkSize = 8192; int intoffset = 0; int intBytesReturned;
Byte[] aBinaryBlob = new Byte[intChunkSize]; string strPathToFile = "C:\\Get'Bytes.jpg";
FileStream filOutput = new FileStream(strPathToFile, FileHode.Create); rdr = cmd. ExecutePeaderfCcrirf.aridBehavior. Sequential Access); rdr. ReadQ;
do {
intBytesReturned = (int) rdr. GetBytes(IntBinaryBlobCol, intoffset,
aBinaryBlob, 0, intChunkSize);
if (intBytesReturned > 0)
filOutput.WriteCaBinaryBlob, 0, intBytesReturned);
intoffset += intBytesReturned; 1 while (intBytesReturned == intChunkSize); filOutput.CloseO; rdr.CloseO;
Двоичные в БД Northwind
Вы, вероятно, заметили, что БД Northwind включает столбцы с ВЮВ-данными. Так. в таблице Employees есть столбец Photo, содержащий фотографию сотрудника.
Предыдущая << 1 .. 218 219 220 221 222 223 < 224 > 225 226 227 228 229 230 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100