现在我找到了一种新的方法,只需要帮助吧。基本上,当用户点击添加到购物车按钮时,我将从product_desc.aspx页面将产品数据插入数据库。因此,当我运行以下代码时,我收到此错误消息。请帮我解决这个问题,谢谢。感谢帮助。
错误:
{"对象引用未设置为对象的实例。"}
我的Product_desc.aspx页面
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:Repeater ID="d1" runat="server">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<div style="height:300px; width:600px; border:1px solid black; margin-left:250px;">
<div style="height:300px; width:200px; float:left; border:1px solid black;">
<img src="data:image;base64,<%# Convert.ToBase64String((byte[])Eval("Image")) %>" />
</div>
<div style="height:300px; width:350px; float:left; border:1px solid black;">
Coffee Name:
<asp:Label ID="CoffeeNameLabel" runat="server" Text='<%# Eval("CoffeName") %>' />
<br />
Coffee Strength
<asp:Label ID="CoffeeStrengthLabel" runat="server" Text='<%# Eval("CoffeeStrength") %>' />
<br />
Coffee Grind
<asp:Label ID="CoffeeGrindLabel" runat="server" Text='<%# Eval("CoffeeGrind") %>' />
<br />
Origin
<asp:Label ID="CoffeeOriginLabel" runat="server" Text='<%# Eval("Origin") %>' />
<br />
Quantity
<asp:Label ID="CoffeeQuantityLabel" runat="server" Text='<%# Eval("Quantity") %>' />
<br />
Price
<asp:Label ID="CoffeePriceLabel" runat="server" Text='<%# Eval("Price") %>' />
</div>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
<br />
<asp:Button ID="b1" runat="server" Text="Add To Cart" onClick="b1_Click" />
</asp:Content>
Product_desc.aspx.cs页码
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["id"] == null)
{
Response.Redirect("ordercoffee.aspx");
}
else
{
id = Convert.ToInt32(Request.QueryString["id"].ToString());
cons.Open();
SqlCommand cmd = cons.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from coffeeshop where Id="+id+"";
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
d1.DataSource = dt;
d1.DataBind();
cons.Close();
}
}
protected void b1_Click(object sender, EventArgs e)
{
//double p = double.Parse((string)ViewState["Price"]);
string cimg = ViewState["Image"].ToString();
string cname = ViewState["CoffeName"].ToString();
string cstrength = ViewState["CoffeeStrength"].ToString();
string cgrind = ViewState["CoffeeGrind"].ToString();
string corigin = ViewState["Origin"].ToString();
string cprice = ViewState["Price"].ToString();
string cquantity = ViewState["Quantity"].ToString();
//string s2 = System.Web.HttpContext.Current.User.Identity.Name;
string s1 = Request.QueryString["id"];
cons.Open();
SqlCommand cmd = cons.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT INTO cart (CoffeeOrderId, CoffeeName, Strength, Grind, Origin, Quantity, Price, Image) VALUES(@orderid, @name, @strength, @grind, @origin, @quantity, @price, @image)";
cmd.Parameters.AddWithValue("@orderid", s1);
cmd.Parameters.AddWithValue("@name", cname);
cmd.Parameters.AddWithValue("@strength", cstrength);
cmd.Parameters.AddWithValue("@grind", cgrind);
cmd.Parameters.AddWithValue("@origin", corigin);
cmd.Parameters.AddWithValue("@quantity", cquantity);
cmd.Parameters.AddWithValue("@price", cprice);
cmd.Parameters.AddWithValue("@image", cimg);
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
cons.Close();
Response.Redirect("login.aspx");
}
答案 0 :(得分:2)
首先根据需要将Sql列定义为Binary
或VarBinary
数据类型
然后将图像转换为字节数组
byte[] imageByteArray;
using(var ms = new MemoryStream())
{
yourImage.Save(ms, yourImage.RawFormat);
imageByteArray = ms.ToArray();
}
现在你可以做到
cmd.Parameters.AddWithValue("@image", imageByteArray);