关于数据库中图片在image控件显示

RainyNight_WC 2015-04-22 01:16:24
前台代码

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" GridLines="Vertical" OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:BoundField DataField="物品编号" HeaderText="物品编号" ReadOnly="true"></asp:BoundField>
<asp:ButtonField HeaderText="显示图片" Text="显示图片" CommandName="Select" />
</Columns>
</asp:GridView>
<asp:Label runat="server" CssClass="col-md-2 control-label" ID="Text"></asp:Label>
<p></p>
<div class="row">
<div class="col-md-4">
<p>缩略图</p>
<asp:Image runat="server" ID="pic" />
</div>
</div>

后台代码

public System.Drawing.Image ReturnPhoto(byte[] streamByte)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte);
System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
return img;
}

protected void GridView1_RowCommand(object source, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
int i = Convert.ToInt16(e.CommandArgument.ToString());
string ID = this.GridView1.Rows[i].Cells[0].Text;
Text.Text = ID;
sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
string sqlstr = "select * from 物品表 where 物品编号=" + ID;
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet();
myda.Fill(myds, "物品表");
String str;
if (myds.Tables["物品表"].Rows[0]["缩略图"] != null)
{
str = myds.Tables["物品类"].Rows[0]["缩略图"].ToString();
byte[] Byte = System.Text.Encoding.Default.GetBytes(str);
System.Drawing.Image img = ReturnPhoto(Byte);
img.Save("~/images/slt.jpg");
pic.ImageUrl = "~/images/slt.jpg";
}
}
}

我用web.config中链接的数据库,现在想点击表格中的“显示图片”选项在下面的image控件中显示该行物品编号所对应的图片。可是VS报错:
“System.NullReferenceException”类型的异常在 App_Web_b3knhkus.dll 中发生,但未在用户代码中进行处理
其他信息: 未将对象引用设置到对象的实例。
求大神指点呀~~~
...全文
238 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Justin-Liu 2015-04-22
  • 打赏
  • 举报
回复
调试一下就知道哪错了
  • 打赏
  • 举报
回复
如果你真要显示这么多,而且图片真的在数据库,那你们可以考虑读取出来后,将图片的name和byte[]放入Session,然后页面打开后通过handler+name从session中读取图片,并清除session
  • 打赏
  • 举报
回复
图片从数据库读出来,然后起同一个名字存到本地……你这个思路很有问题啊 在winform里面可以通过Image将图片赋给PictureBox 但在webform里面必须要有可访问地址
正宗熊猫哥 2015-04-22
  • 打赏
  • 举报
回复
debug 断点调试 f9 f10
myhope88 2015-04-22
  • 打赏
  • 举报
回复
逻辑上好像有问题吧
RainyNight_WC 2015-04-22
  • 打赏
  • 举报
回复
引用 1 楼 wjq 的回复:
你各种ToString的地方都可能抛异常,你自己加断点一点点调试。 另外的问题: 1:如果你一定想这么实现,你的img.Save("~/images/slt.jpg");这句是错的,这里的Save需要的是本地路径,需要用Request.Mappath(("~/images/slt.jpg")转换为本地路径才行。 2:很不建议你这么弄,多余的IO操作不说,并发访问时,不同用户同时点击不同的选项,你取到不同的图片都存到同一个文件里,将导致显然的错误。(存不同的图片又导致大量的垃圾文件),你应该写一个ashx或者ihttphandler,通过传入的querystring决定加载哪个图片数据,image对象直接输出到Response.OutputStream里。你的pic.ImageUrl ="你的ashx文件?ID=XXX"
十分感谢大神的教诲,一下子让我的思路打开了。 对于代码里面的各种各种错误和bug十分抱歉,我还是个学生,这是我做的第一个项目,之前做的课设之类的感觉完全就是糊弄的,所以对于这次代码里的失误之初能够指明再次表示感谢。
wjq 2015-04-22
  • 打赏
  • 举报
回复
你各种ToString的地方都可能抛异常,你自己加断点一点点调试。 另外的问题: 1:如果你一定想这么实现,你的img.Save("~/images/slt.jpg");这句是错的,这里的Save需要的是本地路径,需要用Request.Mappath(("~/images/slt.jpg")转换为本地路径才行。 2:很不建议你这么弄,多余的IO操作不说,并发访问时,不同用户同时点击不同的选项,你取到不同的图片都存到同一个文件里,将导致显然的错误。(存不同的图片又导致大量的垃圾文件),你应该写一个ashx或者ihttphandler,通过传入的querystring决定加载哪个图片数据,image对象直接输出到Response.OutputStream里。你的pic.ImageUrl ="你的ashx文件?ID=XXX"

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧