【问题标题】:How can i pull an image and data from a Database?如何从数据库中提取图像和数据?
【发布时间】:2012-11-25 16:24:06
【问题描述】:

我正在尝试使用 C#.net 从数据库中提取数据并使用 Foreach 循环使其在页面上可见。每次我运行代码时,当我知道数据库中至少有 7 个项目时,我只会显示一个项目。我已经为 C# 放置了下面的代码。

SqlConnection oConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["HomeGrownEnergyConnectionString"].ToString());
    string sqlEnergy = "Select * from Product p where p.ProductTypeId=3";
    SqlCommand oCmd = new SqlCommand(sqlEnergy, oConnection);
    DataTable dtenergy = new DataTable();
    SqlDataAdapter oDa = new SqlDataAdapter(oCmd);
    try
    {
        oConnection.Open(); ;
        oDa.Fill(dtenergy);
    }
    catch (Exception ex)
    {
        lblnodata.Text = ex.Message;
        return;
    }
    finally
    {
        oConnection.Close();
    }
    DataTableReader results = dtenergy.CreateDataReader();

    if (results.HasRows)
    {
        results.Read();
        foreach(DataRow result in dtenergy.Rows)
        {
            byte[] imgProd = result["ThumnailLocation"] as byte[];
            ID.Text = result["ProductID"].ToString();
            Name.Text = result["Name"].ToString();
            price.Text = FormatPriceColumn(result["Price"].ToString());


        }
    }

这是 asp.net 的代码。

<div>
<asp:Image ID="imgProd" CssClass="ProdImg" runat="server" />
<asp:Label runat="server" ID="ID"  />
<asp:Label runat="server" ID="Name" />
<asp:Label runat="server" ID="price" />
<asp:TextBox ID="txtQty" MaxLength="3" runat="server" Width="30px" />
<asp:Button runat="server" ID="Addtocart" Text="Add To Cart" CommandName="AddToCart" ItemStyle-CssClass="btnCol" />

如果有人可以帮助我,那将非常感谢。

【问题讨论】:

  • 我会创建一个文件处理程序 *.ashx 并让该组件返回图像。然后,您可以使用传入的适当参数将 ImageUrl 属性设置为该处理程序。
  • 每次看到数据库中的最后一项。您打算如何在当前设计的页面中看到 7 行?
  • 您正确获取了值问题是数据库中的每一行都将其绑定到同一组控件,因此最后只有最后一行显示给您,因为有数据库中没有更多行

标签: c# asp.net sql


【解决方案1】:

您应该将数据库中的图像列类型设置为 byte[] 并使用此方法来获取和设置图像:

public BitmapImage ImageFromBuffer(Byte[] bytes)
{
    MemoryStream stream = new MemoryStream(bytes);
    BitmapImage image = new BitmapImage();
    image.BeginInit();
    image.StreamSource = stream;
    image.EndInit();
    return image;
}

public Byte[] BufferFromImage(BitmapImage imageSource)
{
    Stream stream = imageSource.StreamSource;
    Byte[] buffer = null;
    if (stream != null && stream.Length > 0)
        {
            using (BinaryReader br = new BinaryReader(stream))
                {
                    buffer = br.ReadBytes((Int32)stream.Length);
                }
        }

    return buffer;
}

【讨论】:

    【解决方案2】:

    我认为您的问题标题应该更像“如何在我的页面上显示数据库结果集”。

    答案是您应该为此使用数据绑定。通过这种方式,您可以设置数据项在页面上的外观。然后你可以将一组记录/对象扔到这个列表中(使用它的布局),它们都按照你的布局中的定义进行渲染。

    这是一个小例子:

    在您的 aspx 代码中:

    <asp:DataList id="dlItems" runat="server">
             <ItemTemplate>
                <%# Eval("ID") %>
                <%# Eval("Name") %>
                <%# Eval("price") %>
             </ItemTemplate>
    </asp:DataList>
    

    在你的cs代码中:

    dlItems.DataSource = dtenergy;
    dlItems.DataBind();
    

    对于您问题的图片部分,请查看其他类似的主题:Display image from database in ASP.net with C#

    有关数据绑定的更多详细信息,您可以查看此处:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datalist.itemdatabound.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 2017-08-18
      相关资源
      最近更新 更多