gpt4 book ai didi

c# - 使用 System.IO.FileStream 将字节数组保存为图像时看不到图像

转载 作者:行者123 更新时间:2023-11-30 22:33:04 24 4
gpt4 key购买 nike

我正在从 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();

员工类除了在 page_load 和我的数据库类之间传递数据外什么都不做。

文件以正确的名称保存在正确的位置,大小看起来也正确。但我无法打开它或看到图片。文件已损坏。

客户告诉我sql server中的image字段包含BMP图片。

我在这里有点迷路,有没有人有使用 mssql blob 的经验?

有什么方法可以查看数据库中的图像/blob 字段是否已损坏?

我的代码中是否遗漏了一些重要的东西?

问候,ssg。

最佳答案

首先,停止在您的代码中进行 SQL 注入(inject)。请立即停止,检查您的整个项目,并用适当的参数替换所有您构建动态 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;

阅读How Data Access Code Affects Database Performance关于如何正确使用参数。其次,使用适当的谓词来定位数据。不需要 LIKE。使用 =:

 string strSql = "select pic from emp where number = @number";

现在,您的问题是:为什么一开始就保存图像,为什么不直接使用数据库中的图像?参见 Download and Upload images from SQL Server via ASP.Net MVC对于以高效流方式使用 SQL Server BLOB 作为媒体存储的示例,不使用全图像大小内存数组复制分配或中间文件。

关于c# - 使用 System.IO.FileStream 将字节数组保存为图像时看不到图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8481323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com