Как в БД засунуть массив байтов в ячейку типа blob?
Этот код я использую для редактирования данных в БД. Когда данные типа int или string все работает, но я не могу понять как мне вставить массив байтов в ячейку с типом данных BLOB. 3 дня уже штурмую гугл, яндекс, youtube, но не могу найти решение.
OdbcTransaction transaction = null;
OdbcCommand command = new OdbcCommand();
transaction = connection.BeginTransaction();
command.Connection = connection;
command.Transaction = transaction;
command.CommandText = "UPDATE tb_vs SET te_file=" + bytes + " WHERE te_comp LIKE '" + ParStr + "'";
//command = new OdbcCommand("UPDATE tb_vs SET te_file=" + bytes + " WHERE te_comp LIKE '" + ParStr + "'", connection);
//command.Parameters.Add("@byte", OdbcType.Blob).Value = bytes;
command.ExecuteReader();
transaction.Commit();
Ответы (2 шт):
Никогда не используйте конкатенацию строк для составления sql-запросов. Это грозит SQL-инъекцией.
Всегда используйте параметризованные запросы: 1, 2, 3.
Вы не указали, какую именно СУБД и провайдер используете. Можно ли применить именованные параметры или только позиционные.
Массиву байтов в .NET соответствует тип OdbcType.Binary. См. Specifying parameter data types. И лучше смотреть именно английскую версию документации, потому что перевод на русский очень плох.
Ну и наконец не забываем освобождать занятые ресурсы.
using (var transaction = connection.BeginTransaction())
using (var command = new OdbcCommand())
{
command.Connection = connection;
command.Transaction = transaction;
command.CommandText =
"UPDATE tb_vs SET te_file = ? WHERE te_comp LIKE ?";
command.Parameters.Add("@p1", OdbcType.Binary).Value = bytes;
command.Parameters.Add("@p2", OdbcType.NVarChar).Value = ParStr;
int rowsAffected = command.ExecuteNonQuery();
transaction.Commit();
}
Решил. Заменил OdbcType на Image:
command.Parameters.Add("@p1", OdbcType.Image).Value = bytes;
Хоть там файл и не Image, но видимо все равно какой формат файла так как это просто байты.
Alexander Petrov спасибо за помощь!