用System.IO.FileStream保存字节数组为图像时看不到图像
本文关键字:图像 数组 看不到 字节数 字节 System IO FileStream 保存 | 更新日期: 2023-09-27 18:17:42
我正在从ms sql server图像字段中提取数据。字节数组是这样形成的
public byte[] saveImageBlob(string number)
{
string strSql = "select pic from emp where number like '" + number + "'";
SqlCommand cmd = new SqlCommand(strSql, conn);
SqlDataReader MyReader = cmd.ExecuteReader();
if (MyReader.Read())
{
byte[] m_MyImage = (byte[])MyReader["pic"];
return m_MyImage;
}
return null;
}
然后我调用数组在我的page_load函数,并把它放在这样的文件流
Employee emp = new Employee();
emp.getEmployee(Request.QueryString["user"]);
string file_name = System.AppDomain.CurrentDomain.BaseDirectory + "/img/" + emp.Number.ToString() + ".bmp";
System.IO.FileStream _FileStream = new System.IO.FileStream(file_name, System.IO.FileMode.Create, System.IO.FileAccess.Write);
_FileStream.Write(emp.Picture, 0, emp.Picture.Length);
_FileStream.Close();
employee类只是在page_load和我的db类之间传递数据。
文件以正确的名称保存在正确的位置,并且大小看起来正确。但是我打不开,也看不见照片。文件损坏
客户告诉我sql server中的image字段包含BMP的图像。
我有点迷失在这里,有没有人有经验的工作与mssql blobs?
是否有任何方法我可以看到如果图像/blob字段在数据库中损坏?
我错过了一些重要的在我的代码?
With regards, ssg.
首先,停止在代码中进行SQL注入。请立即停止,检查您的整个项目,并用适当的参数替换所有在构建动态SQL时出现的错误:
string strSql = "select pic from emp where number like @number";
SqlCommand cmd = new SqlCommand(strSql, conn);
cmd.Parameters.Add ("@number", SqlDbType.Varchar, 8000);
cmd.Parameters["@number"].Value = number;
阅读如何正确使用参数的数据访问代码如何影响数据库性能。其次,使用适当的谓词来定位数据。不需要LIKE
。使用=
:
string strSql = "select pic from emp where number = @number";
现在,您的问题是:为什么要保存图像,为什么不直接从数据库中使用图像?参见通过ASP从SQL Server下载和上传图像。. Net MVC示例,该示例使用SQL Server BLOB作为高效流媒体方式的媒体存储,而不使用完整的映像大小-内存-数组-复制分配或中间文件。