如何将文件插入SQL Server 2005中的Image数据类型

时间:2011-11-18 06:09:25

标签: c# sql-server-2005

我正在尝试使用内联查询将文件保存为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'   已经宣布。变量名在a中必须是唯一的   查询批处理或存储过程。

我怎样才能纠正它以使其正常工作。好吧,我没有绑定特定的数据类型,但我需要保存文件,以后再检索它,我认为图像数据类型将是一个不错的选择,但无法实现。任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:0)

试试这个,

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();