【发布时间】:2021-10-13 20:59:21
【问题描述】:
您好,我只是在 asp.net 中制作了一个 Web 应用程序来执行 CRUD 操作,其中也包括图像文件操作。此 Web 应用程序使用 Web 服务来执行数据库操作。
在 IIS 上运行时,我遇到以下错误。
“无法将“System.String”类型的对象转换为“System.Byte[]”类型”
你能帮忙吗?不使用 Web 服务时,相同的应用程序代码可以正常工作。
错误: enter image description here
FilmGrid.aspx.cs 文件中的图像视图代码
FilmService.FilmCrud objFCRUD = new FilmService.FilmCrud();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Refreshdata();
}
}
//To display entire film database as gridview
protected void Refreshdata()
{
DataSet dTbl = new DataSet();
XmlElement exelement = objFCRUD.SelectRecord(0);
if (exelement != null)
{
XmlNodeReader nodeReader = new XmlNodeReader(exelement);
dTbl.ReadXml(nodeReader, XmlReadMode.Auto);
gvMovies.DataSource = dTbl;
gvMovies.DataBind();
}
}
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView dr = (DataRowView)e.Row.DataItem;
string imageUrl = "data:image/jpg;base64," + Convert.ToBase64String((byte[])dr["poster"]);
(e.Row.FindControl("Image1") as Image).ImageUrl = imageUrl;
}
}
我的 FilmGrid.aspx 文件
<asp:GridView ID="gvMovies" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White" runat="server" BorderWidth="2px" CellPadding="4" OnRowDataBound="OnRowDataBound" AutoGenerateColumns="false" Height="217px" Width="1491px">
<Columns>
<asp:BoundField DataField="film_id" HeaderText ="Film Id" />
<asp:BoundField DataField="film_name" HeaderText ="Film Name" />
<asp:BoundField DataField="actor" HeaderText ="Actor" />
<asp:BoundField DataField="actress" HeaderText ="Actress" />
<asp:BoundField DataField="pub_date" HeaderText ="Published Date" />
<asp:BoundField DataField="director" HeaderText ="Director" />
<asp:BoundField DataField="producer" HeaderText ="Producer" />
<asp:BoundField DataField="prod_cost" HeaderText ="Production Cost" />
<asp:BoundField DataField="dist_cost" HeaderText ="Distribution Cost" />
<asp:BoundField DataField="category" HeaderText ="Category" />
<asp:BoundField DataField="cert_category" HeaderText ="Certified Category" />
<asp:TemplateField><ItemTemplate><asp:Image ID="Image1" HeaderText ="Poster" runat="server" Width="122px" Height="148px"/></ItemTemplate></asp:TemplateField>
<asp:TemplateField><ItemTemplate><asp:LinkButton ID="lnkedit" runat="server" Text="Edit" PostBackUrl='<%# "~/AddFilm.aspx?film_id="+Eval("film_id") %>'/></ItemTemplate></asp:TemplateField>
</Columns>
</asp:GridView>
【问题讨论】:
-
dr["poster"]的值究竟是什么?该列的数据类型是什么?会不会是 base64 编码的值? -
@HansKesting 海报字段在数据库中为 VARBINARY(MAX)。图像保存为二进制数据