c# 读取Northwind数据库image字段

 更新时间:2009年03月13日 22:36:36   作者:  
我在写一个三层结构Demo时,使用了Northwind这个范例数据库。但是奇怪的是,读取Categories表的Picture列(image类型)无法在image控件中正常显示(解决方案在后面代码中可以看到)。
这里值得一提的是,web控件image不像winForm控件那样可以通过读取二进制流赋值给image属性来显示图像。可以通过变通的方法来实现,流行的做法是新建一个页面专门用来显示图像,这里代码直接用孟子E章前辈的(作了小修改,主要是剔除78个byte字节流来正常显示northwind数据库的图片):
ReadImage.aspx.cs
复制代码 代码如下:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

namespace WebApplication2
{
public partial class ReadImage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string strImageID = Request.QueryString["id"];
SqlConnection myConnection = new SqlConnection("Data Source=.;Initial Catalog=northwind;User Id=sa;Password=123456;");
SqlCommand myCommand = new SqlCommand("Select Picture from Categories Where CategoryID="
+ strImageID, myConnection);

try
{
myConnection.Open();
SqlDataReader myDataReader;
myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
if (myDataReader.Read())
{
Response.Clear();

Response.ContentType = "image/jpeg";
byte[] b = (byte[])myDataReader["Picture"];
//下面的方法就是用来让图片可以正常显示
byte[] temp=new byte [b.Length -78];
Array.Copy(b, 78, temp, 0, b.Length - 78);
Response.BinaryWrite(temp);
}
myConnection.Close();
}
catch (SqlException SQLexc)
{
Response.Write(SQLexc.ToString ());
}
Response.End();

}
}
}

在源页面如Default.aspx.cs可以通过下面方法调用
复制代码 代码如下:

protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack )
Image1.ImageUrl = FormatURL("1");

}
protected string FormatURL(string strArgument)
{
return "ReadImage.aspx?id=" + strArgument;
}

如果不想新建一个页面来承载图像,也可以使用下面的方法:(注意:下面的类是自定义的,大家看得懂这个方法就可以了)
复制代码 代码如下:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

namespace WebApplication2
{
public partial class ReadImage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string strImageID = Request.QueryString["id"];
SqlConnection myConnection = new SqlConnection("Data Source=.;Initial Catalog=northwind;User Id=sa;Password=123456;");
SqlCommand myCommand = new SqlCommand("Select Picture from Categories Where CategoryID="
+ strImageID, myConnection);

try
{
myConnection.Open();
SqlDataReader myDataReader;
myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
if (myDataReader.Read())
{
Response.Clear();

Response.ContentType = "image/jpeg";
byte[] b = (byte[])myDataReader["Picture"];
byte[] temp=new byte [b.Length -78];
Array.Copy(b, 78, temp, 0, b.Length - 78);
Response.BinaryWrite(temp);
}
myConnection.Close();
}
catch (SqlException SQLexc)
{
Response.Write(SQLexc.ToString ());
}
Response.End();

}
}
}

相关文章

  • asp.net 文件上传 实时进度

    asp.net 文件上传 实时进度

    在swfupload的基础上增加一些个性化东西.附图2张.
    2009-11-11
  • 利用EF6简单实现多租户的应用

    利用EF6简单实现多租户的应用

    这篇文章主要给大家介绍了关于如何利用EF6简单实现多租户应用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用EF6具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • asp.net 防止用户通过后退按钮重复提交表单

    asp.net 防止用户通过后退按钮重复提交表单

    经过一番仔细的寻寻觅觅之后,我发现仍旧无法找出真正能够完全禁用浏览器后退按钮的办法。所有这里介绍的方法都能够在不同程度上、以不同的方式禁止用户返回前一页面,但它们都有各自的局限。
    2009-11-11
  • Asp.net利用JQuery AJAX实现无刷新评论思路与代码

    Asp.net利用JQuery AJAX实现无刷新评论思路与代码

    Asp.net利用JQuery AJAX实现无刷新评论,此功能是每一个从事asp.net开发者的朋友都希望实现的,本文利用闲暇时间整理了一些,有需要的朋友可以参考下
    2012-12-12
  • .NET Core对象池的应用:设计篇

    .NET Core对象池的应用:设计篇

    本文主要讲解对象池的三个核心对象:表示对象池的ObjectPool<T>对象、对象值提供者的ObjectPoolProvider对象,已及控制池化对象创建与释放行为的IPooledObjectPolicy<T>对象。感兴趣的小伙伴可以参考一下这篇文章
    2021-09-09
  • mvc form表单提交的几种形式整理总结

    mvc form表单提交的几种形式整理总结

    这篇文章主要介绍了mvc form表单提交的几种形式整理总结的相关资料,这里提供了几种方法及实例代码,需要的朋友可以参考下
    2016-12-12
  • .NET中的异常和异常处理用法分析

    .NET中的异常和异常处理用法分析

    这篇文章主要介绍了.NET中的异常和异常处理用法,分析了.NET中的异常处理机制以及相关注意事项,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • Asp.Net类库中发送电子邮件的代码

    Asp.Net类库中发送电子邮件的代码

    发送电子邮件是许多需要用户注册的网站的通用功能,通过正则表达式我们可以过滤掉不符合电子邮件格式的输入,但是仍没有办法确保用户填写的电子邮件地址一定是他本人真实有效的电子邮件地址
    2008-09-09
  • 浅析ASP.NET路由模型工作原理

    浅析ASP.NET路由模型工作原理

    很多人知道Asp.Net中路由怎么用的,却不知道路由模型内部的运行原理,今天我就给大家吹下ASP.NET的路由模块是如何工作的
    2016-03-03
  • ASP.NET MVC3网站创建与发布(1)

    ASP.NET MVC3网站创建与发布(1)

    这篇文章主要介绍了ASP.NET MVC3网站创建与发布,根据文章内容大家可以实现发布网站,感兴趣的小伙伴们可以参考一下
    2015-08-08

最新评论