【问题标题】:Unable to cast object of type 'System.String' to type 'System.Byte[]' ASP.NET web application无法将“System.String”类型的对象转换为“System.Byte[]”类型的 ASP.NET Web 应用程序
【发布时间】: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)。图像保存为二进制数据

标签: c# asp.net xml image


【解决方案1】:

您不能直接将字符串转换为字节[]。

你必须使用,例如Encoding类。

byte[] array = Encoding.ASCII.GetBytes("Your string");

https://www.c-sharpcorner.com/article/c-sharp-string-to-byte-array/

或者您可以尝试从字符串中获取 char 数组,然后将每个 char 转换为字节。

【讨论】:

    【解决方案2】:

    看起来dr["poster"] 返回一个字符串,你不能直接转换(这意味着使用(your_type_here))将字符串转换为字节[]。查看 Piotr Szuflicki 的解决方案,了解如何将字符串正确转换为 byte[]。

    【讨论】:

    • @user16515314 那你确定要从字符串转换为字节[]再转换为字符串?
    • string imageUrl = "data:image/jpg;base64," + (dr["poster"]);工作完美!我的坏
    • 对于奖励积分,您可以删除不必要的括号(即 () 周围的 dr["poster"])。祝你的编码之旅好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多