Работа с 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, то так же будет закрыто подключение к базе данных. |