Member 12948931 Ответов: 1

Извлеките Blob-объекты из базы данных SQL и запишите их в файл, когда у меня будет нужный образ


Тайм-аут истек. Время ожидания истекло до завершения операции или сервер не отвечает.

Я не уверен на 100%, что закодировал все правильно.

Таблица adsblobfile состоит из:

blob_image varbinary (MAX)
тип uniqueidentifier file_guid
размер_файла инт


Все в Интернете использует идентификатор, определенный как int; однако мой file_guid является uniqueidentifier.

Не мог бы кто-нибудь сказать мне, что я делаю не так? Спасибо.

Что я уже пробовал:

общественного недействительными getblob(в строку doc1,country_client строку,строку varPathToNewLocation)
{

пробовать
{
using (SqlConnection varConnection = new SqlConnection(ConnectionString2))
{
Sqlcommand, который getpic = новая команда sqlcommand(@"выбрать различные б.blob_image,г.название,Год.mime_type,б.размер_файла " +
"Из adsdocument y" +
"Внутреннее соединение adsindex x" +
"О (Х.doc_guid = г.doc_guid )" +
"Внутреннее соединение adspage p" +
"О (Х.doc_guid = стр. doc_guid) " +
"Внутреннее соединение adsfileblob b" +
"На (стр. file_guid = б.file_guid) " +
"Левое внешнее соединение agltransact t" +
"На (литой(т. voucher_no как varchar(50)) = х.doc_index_2 ) и (T.клиент = Х.doc_index_1 ) " +
"Где x. doc_index_1 = @country" +
"AND y. title = @doc", varConnection);

getpic.Параметры.Добавить("@страна", значения sqldbtype.Тип nvarchar,50).Значение = country_client;
getpic.Параметры.Добавить("@док", значения sqldbtype.Тип nvarchar,50).Значение = doc1;

FileStream fs; / / записывает BLOB-объект в файл (*. bmp)
BinaryWriter bw; / / передает BLOB-объект в объект FileStream
int buffersize = 1000; / / размер буфера BLOB-объектов
byte[] buffer = новый байт[buffersize];
байт[] outbyte = новый байт[параметр bufferSize]; // двоичный байт[] буфера, которые должны быть заполнены метод getbytes
long numberofbytes = 0;
//long retval; / / байты, возвращаемые из GetBytes
long startindex = 0; / / начальная позиция в выводе BLOB-объекта
//string var_id =""; / / идентификатор, используемый в имени файла


if (varConnection.State != ConnectionState.Открыть)
{
варконнекция.Открыть();
}

SqlDataReader myReader = getpic.ExecuteReader(CommandBehavior.SingleRow);
myReader.Читать();
// Создайте файл для хранения выходных данных

string filname = varPathToNewLocation.ToString () + "\ \ " + doc1.Метод toString();
fs = new FileStream(filname, FileMode.OpenOrCreate, FileAccess.Пиши, Файлообменник.Писать);
bw = новый BinaryWriter(fs);

делать
{
numberofbytes = myReader.Метод getbytes(0, параметр startindex, буфер, 0, параметр bufferSize);
if (numberofbytes == 0)
{
перерыв;
}
bw. Write(buffer, 0, (int)numberofbytes);
startindex += numberofbytes;
} while (true);
чёрно-белый.Промывать();

ZurdoDev

Ошибка говорит о том, что вам нужно увеличить CommandTimeout на getpic.

1 Ответов

Рейтинг:
2

OriginalGriff

Не имея возможности выполнить ваш запрос, я бы рискнул, что SELECT DISTINCT b.blob_image возможно, это имеет отношение и здесь. Вместо этого добавьте хэш-столбец, содержащий SHA или MD5 данных blob-объекта, и используйте его в качестве отдельного сравнения. сравнение 128-или 256-битных значений будет значительно быстрее, чем сравнение целых данных изображения!

Используйте его для возврата значений идентификаторов и соедините их для получения выходных данных.


Member 12948931

Устранение DISTINCT действительно устранило ошибку; однако файлы все еще не создаются.