我正在尝试使用内联查询将文件保存为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中必须是唯一的 查询批处理或存储过程。
我怎样才能纠正它以使其正常工作。好吧,我没有绑定特定的数据类型,但我需要保存文件,以后再检索它,我认为图像数据类型将是一个不错的选择,但无法实现。任何建议都会有所帮助。
答案 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();