【问题标题】:How to display/bind varbinary object from database into gridview?如何将 varbinary 对象从数据库显示/绑定到 gridview?
【发布时间】:2019-04-29 02:24:19
【问题描述】:

我正在尝试将数据库中的数据绑定到我的网格视图中。我的一列包含 varbinary(MAX) 数据类型。 当我绑定它时,我的 gridview 显示 System.Byte[] 而不是实际数据。

我试图反序列化对象,但我不知道从那里去哪里? 我也尝试过使用自己的 ItemTemplate。

带有 VARBINARY 的表:

CREATE TABLE [dbo].[TP_ShoppingCart] (
    [ShoppingCartID] INT             IDENTITY (1, 1) NOT NULL,
    [Email]          VARCHAR (250)   NOT NULL,
    [ShoppingCart]   VARBINARY (MAX) NULL,
    PRIMARY KEY CLUSTERED ([ShoppingCartID] ASC),
    CONSTRAINT [FK_TP_ShoppingCart_TP_CustomerAccts] FOREIGN KEY ([Email]) REFERENCES [dbo].[TP_CustomerAccounts] ([Email])
);

存储过程:

CREATE PROCEDURE [dbo].TP_GetSalesByCustomer
    @theEmail varchar(250)
AS
    SELECT * FROM TP_Sales s JOIN TP_ShoppingCart sa ON s.ShoppingCartID = sa.ShoppingCartID
    WHERE s.Email = @theEmail AND sa.Email = @theEmail;

网格视图代码:

<asp:Panel ID="SalesPanel" runat="server" CssClass="col-sm-8 col-md-8 col-lg-8 table-bordered">
            <h1><small><span class="glyphicon glyphicon-th-list" aria-hidden="true"></span></small> Customer Sales</h1>
            <br />
            <br />
            <asp:GridView ID="gvSales" runat="server" AutoGenerateColumns="false" CssClass="table table-bordered table-hover">
                <Columns>
                    <asp:BoundField DataField="SalesID" HeaderText="Sales ID" SortExpression="SalesID" />
                    <asp:BoundField DataField="SaleDate" HeaderText="Date of Sale" DataFormatString="{0:d}" />
                    <asp:TemplateField HeaderText="Products">
                        <ItemTemplate>
                            <asp:Label ID="lblShoppingCart" runat="server" Text='<%# Eval("ShoppingCart") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="ShoppingCart" HeaderText="Products" DataFormatString="" />
                    <asp:BoundField DataField="SaleTotal" HeaderText="Sale Total" DataFormatString="{0:C0}" />
                </Columns>
            </asp:GridView>

</asp:Panel>

代码隐藏:

protected void btnSalesAccount_Click(object sender, EventArgs e)
        {
            CustomerAccountPanel.Visible = false;
            UpdateAccountPanel.Visible = false;
            CustomerCCPanel.Visible = false;
            UpdatePasswordPanel.Visible = false;
            SalesPanel.Visible = true;
            gvSales.Visible = true;

            DBConnect objDB = new DBConnect();
            SqlCommand objCmd = new SqlCommand();
            objCmd.CommandType = CommandType.StoredProcedure;
            objCmd.CommandText = "TP_GetSalesByCustomer";

            //string email = Session["custEmail"].ToString();

            objCmd.Parameters.AddWithValue("@theEmail", email);

            gvSales.DataSource = objDB.GetDataSetUsingCmdObj(objCmd);
            gvSales.DataBind();

【问题讨论】:

    标签: c# asp.net gridview aspxgridview varbinary


    【解决方案1】:

    试试这个:

    SELECT CONVERT(varchar(MAX), yourvarbincolumn, 0)

    Here是更多关于样式选择的细节(第三个参数)。

    而且,这里您需要将二进制数据类型转换为 varchar 数据类型,让我们从您的示例中选择它:

    CONVERT(VARCHAR(MAX), [dbo].[TP_ShoppingCart].[ShoppingCart], 1) AS ShoppingCart

    【讨论】:

      【解决方案2】:
      SELECT CONVERT(VARCHAR(MAX), your_varbinary_column, 1) AS for_display
      FROM your_table
      

      在我提到的代码中将 varbinary(max) 列转换为 varchar。

      访问:http://geekswithblogs.net/dotNETvinz/archive/2009/04/24/faq-displaying-image-from-database-to-gridview-control.aspx

      你可以使用另一种方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-05
        • 1970-01-01
        • 2014-11-09
        • 2011-07-27
        • 2013-04-12
        • 1970-01-01
        相关资源
        最近更新 更多