【发布时间】:2023-03-18 08:07:01
【问题描述】:
所以我已经填写了数据表,但我需要图像数据的列不起作用。我可以看到表格已填满,可以看到它正在读取数据,但不是字节数组,也不是显示图像。
public void Bindformview()
{
try
{
SqlDataAdapter adp = new SqlDataAdapter("Select * from Recipes", con);
DataTable dt = new DataTable();
adp.Fill(dt);
if (dt.Rows.Count > 0)
{
FormViewRecipes.DataSource = dt;
FormViewRecipes.DataBind();
}
else
{
FormViewRecipes.DataSource = null;
FormViewRecipes.DataBind();
}
}
而且我知道我需要插入此代码或类似的代码,将数据作为字节流从 db“thumbnail varbinary(MAX)”列中提取出来,以获取图像正确显示的字节数组:
DataColumn column = new DataColumn("MyImage"); //Create the column.
column.DataType = System.Type.GetType("System.Byte[]"); //Type byte[] to store image bytes.
column.AllowDBNull = true;
column.Caption = "My Image";
table.Columns.Add(column); //Add the column to the table.
还有这个:
DataRow row = table.NewRow();
row["MyImage"] = <Image byte array>;
tables.Rows.Add(row);
但我不需要新列或新行,因为这些字段已经存在。 那么如何在数据表中填充“Thumbnail”列,并显示字节数组数据,以及在加载 dt 的 if 语句之前,在绑定 dt 的 if 语句中,我在哪里插入所述代码?
我是否通过这样声明列来做到这一点:
dt.column.thumbnail.fill(byte[] bytes = (byte[])cmd.ExecuteScalar());
然后像这样把这个填入formview image1 ID?
string strBase64 = Convert.ToBase64String(bytes);
formviewrecipes.Image1.ImageUrl = "data:Image/png;base64," + strBase64;
我只是处于停顿状态,不知道该怎么做。
需要明确的是,我已经拥有带有正确图像信息的数据库,并且可以通过<asp:image id=image1...etc /> 显示它,以及使用此代码在表单视图之外检索图像的其他代码,
string cs = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand("spGetImageByID", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter paramId = new SqlParameter()
{
ParameterName = "@Id",
Value = Request.QueryString["Id"]
};
cmd.Parameters.Add(paramId);
con.Open();
byte[] bytes = (byte[])cmd.ExecuteScalar();
string strBase64 = Convert.ToBase64String(bytes);
Image1.ImageUrl = "data:Image/png;base64," + strBase64;
}
}
但它在<asp:FormView...etc/> 中不起作用,我需要能够让它这样做以进行页面格式化。
这就是为什么我要朝这个方向前进,即现在使用数据表。如果您有更好的解决方案,我愿意尝试,只要它可以在 <asp:formview /> 元素内使用。谢谢。
【问题讨论】:
标签: c# asp.net arrays sql-server datatable