我有一个包含3个列的sql数据库。 2个列是字符串,1个是jpeg。图像存储为VARBINARY(MAX)
我已将此数据保存到asp.net中的数据表中。我想将图像作为字节数组,但显然是对象类型...。还是它?
1]什么是dt.rows [0] [2],对象或字节数组?
1b)如果不是字节数组,为什么.tostring返回“ System.Byte []”?
我的索引控制器
public IActionResult Index()
{
SqlConnection con = new SqlConnection("Data Source=DESKTOP-896D683;Initial Catalog=aspdb1;Integrated Security=True");
SqlDataAdapter sda = new SqlDataAdapter(" select * from stuff_for_carrousel ", con);
List<front_page> mi_list = new List<front_page>();
DataTable dt = new DataTable();
sda.Fill(dt);
Image newImage = mi_converter.convert_to_image(dt.Rows[0][2]);
ViewData["dd"] = dt.Rows[0][0].ToString();
ViewData["ccc"] = dt.Rows[0][1].ToString();
ViewData["ts"] = dt.Rows[0][2].GetType().ToString();
return View();
}
我的转换器
public class mi_converter
{
public Image convert_to_image(byte[] b)
{
using (var ms = new MemoryStream(b))
{
return Image.FromStream(ms);
}
}
}
}
我想我只需要将dt.rows [0] [2]转换为字节数组。
dt.Rows[0][0]
的意思是:向我获取第一行第一列的值。由于该值基本上可以是任何值,因此.Net框架只能将其表示为System.Object
。
但是,您的方法需要byte[]
-因此,您需要将该对象转换为字节数组,或者更好的是,使用Field<T>
扩展方法代替索引器:
Field<T>
以及一些注意事项:
使用Image newImage = mi_converter.convert_to_image(dt.Rows[0].Field<Byte[]>(2));
是一个坏主意-它使您的代码容易受到表中更改的影响。
使用顺序索引器(0,1,2)甚至更糟,因为现在您的代码更容易受到表中更改的影响。
在代码中使用标识符,例如select *
,"dd"
或任何其他无意义的字母组合,这是一个糟糕的主意-总是使用有意义的名称。您未来的自我会感谢您。