Руководство по работе с БД Firebird с использованием библиотеки ADO .Net 2.0

       

Работа с BLOB полями


IBProvider поддерживает работу с двумя типами BLOB полей: содержащих текст и бинарные данные. Не могу не заметить, что при использовании этого провайдера работа с BLOB полями происходит так же, как и с обычными типами данных:

public void BLOBReadWriteTest() { OleDbConnection con = ConnectionProvider.CreateConnection(); con.Open(); OleDbTransaction trans = con.BeginTransaction();

//BLOB Read command

OleDbCommand cmd = new OleDbCommand( "select proj_id, proj_name,proj_desc from project", con, trans);

//BLOB write command OleDbCommand cmd_update = new OleDbCommand( "update project set proj_desc=:proj_desc where proj_id=:proj_id", con, trans);

//create parameters with BSTR type

cmd_update.Parameters.Add("proj_desc", OleDbType.BSTR); cmd_update.Parameters.Add("proj_id", OleDbType.BSTR);

using (OleDbDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { //чтение BLOB Console.WriteLine("PROJECT: " + rdr["proj_name"].ToString()); Console.WriteLine(rdr["proj_desc"].ToString());

//запись BLOB

cmd_update.Parameters["proj_id"].Value = rdr["proj_id"];

//каждый раз меняем регистр данных в BLOB поле

string new_project_description = rdr["proj_desc"].ToString(); if (new_project_description.ToUpper() != new_project_description) new_project_description = new_project_description.ToUpper(); else

new_project_description = new_project_description.ToLower();

cmd_update.Parameters["proj_desc"].Value = new_project_description; Assert.AreEqual(1, cmd_update.ExecuteNonQuery()); } }

trans.Commit(); con.Close(); }

Здесь тип параметров команды обновления установлен в OleDbType.BSTR. В этом случае провайдер корректно распознает тип параметров и произведет их преобразование к типам базы данных.

СОВЕТ.   В примере OleDbDataReader использован совместно с конструкцией using. Он поддерживает интерфейс IDispose и после завершения работы сам позаботится о своем закрытии, а если в метод OleDbCommand.ExecuteReader() передать значение CommandBehavior.CloseConnection, то так же будет закрыто подключение к базе данных.



Содержание раздела