Как вставить файл в тип данных Image в SQL Server 2005 - PullRequest
0 голосов
/ 18 ноября 2011

Я пытаюсь сохранить файл в тип данных Image с помощью встроенного запроса.

INSERT INTO tblPDFInfo(FileImage, PdfFileName, FeedDateTime, HasProcessed)
VALUES(@fileBytes, @fileName, getutcdate(), 0)

, а затем, если я использую string.format, тогда он рендерит байтовый массив в строку, и поэтому он не приносит удачи.

Другой способ, если я создам sqlcommand и

   objCmd = new SqlCommand(strSQL, objConn, objTrans);
   objFileDataParam = new SqlParameter("@fileBytes", SqlDbType.Image);
   objFileDataParam.Value = (byte[])fileData;
   objCmd.Parameters.Add(objFileDataParam);

   objFileNameParam = new SqlParameter("@fileName", SqlDbType.VarChar);
   objFileNameParam.Value = PDFfileName;
   objCmd.Parameters.Add(objFileNameParam);
   objCmd.CommandText = strSQL;  

Тогда при запуске запроса он говорит

System.Data.SqlClient.SqlException: необходимо объявить скалярную переменную "@fileBytes"

И если во встроенном запросе я объявляю ту же самую переменную, то это также дает мне ошибку, говорящую

System.Data.SqlClient.SqlException: имя переменной '@fileBytes' уже было объявлено. Имена переменных должны быть уникальными в пределах запросить пакет или хранимую процедуру.

Как я мог исправить это, чтобы заставить его работать. Ну, я не привязан к определенному типу данных, но мне нужно сохранить файл, а затем извлечь его, я думаю, что тип данных изображения был бы хорошим выбором, но не смог этого сделать. Любые предложения действительно помогут.

1 Ответ

0 голосов
/ 18 ноября 2011

Попробуйте,

string strSql="INSERT INTO tblPDFInfo (FileImage,PdfFileName,FeedDateTime,HasProcessed) 
               values(@fileBytes,@fileName,@getutcdate,@hasprocessed)";

byte []bytes=(byte[])fileData;
objCmd = new SqlCommand(strSQL, objConn, objTrans);
objCmd.Parameters.Add("@fileBytes", SqlDbType.Image,bytes.Length).Value=bytes;
objCmd.Parameters.Add("@fileName", SqlDbType.VarChar,100).Value=PDFfileName;
objCmd.Parameters.Add("@getutcdate", SqlDbType.DateTime).Value=DateTime.Now;
objCmd.Parameters.Add("@hasprocessed", SqlDbType.Bit).Value=0;

objCmd.ExecuteNonQuery();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...