用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.

用System.IO.FileStream保存字节数组为图像时看不到图像

首先,停止在代码中进行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作为高效流媒体方式的媒体存储,而不使用完整的映像大小-内存-数组-复制分配或中间文件。