手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

ASP.NET如何存取SQL Server数据库图片

来源:互联网 作者:west263.com 时间:2008-02-22
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

  SQL Server提供了一个特别的数据类型:image,它是一个包含binary数据的类型。下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法。在这篇文章中我们要看到如何在SQL Server中存储和读取图片。

  1、建立一个表:

  在SQL SERVER中建立这样结构的一个表:

  

ASP.NET如何存取SQLServer数据库图片

  2、存储图片到SQL SERVER数据库中

  为了能存储到表中,你首先要上传它们到你的WEB 服务器上,你可以开发一个web form,它用来将客户端中TextBox web control中的图片入到你的WEB服务器上来。将你的 encType 属性设置为:myltipart/formdata.

  Stream imgdatastream = File1.PostedFile.InputStream;

  int imgdatalen = File1.PostedFile.ContentLength;

  string imgtype = File1.PostedFile.ContentType;

  string imgtitle = TextBox1.Text;

  byte[] imgdata = new byte[imgdatalen];

  int n = imgdatastream.Read(imgdata,0,imgdatalen);

  string connstr=((NameValueCollection)Context.GetConfig("appSettings"))["connstr"];

  SqlConnection connection = new SqlConnection(connstr);

  SqlCommand command = new SqlCommand

  ("INSERT INTO ImageStore(imgtitle,imgtype,imgdata)

  VALUES ( @imgtitle, @imgtype,@imgdata )", connection );

  SqlParameter paramTitle = new SqlParameter

  ("@imgtitle", SqlDbType.VarChar,50 );

  paramTitle.Value = imgtitle;

  command.Parameters.Add( paramTitle);

  SqlParameter paramData = new SqlParameter( "@imgdata", SqlDbType.Image );

  paramData.Value = imgdata;

  command.Parameters.Add( paramData );

  SqlParameter paramType = new SqlParameter( "@imgtype", SqlDbType.VarChar,50 );

  paramType.Value = imgtype;

  command.Parameters.Add( paramType );

  connection.Open();

  int numRowsAffected = command.ExecuteNonQuery();

  connection.Close();

  3、从数据库中恢复读取

  现在让我们来从SQL Server中读取我们放入的数据吧!我们将要输出图片到你的浏览器上,你也可以将它存放到你要的位置。

  private void Page_Load(object sender, System.EventArgs e)

  {

  string imgid =Request.QueryString["imgid"];

  string connstr=((NameValueCollection)

  Context.GetConfig("appSettings"))["connstr"];

  string sql="SELECT imgdata, imgtype FROM ImageStore WHERE id = " imgid;

  SqlConnection connection = new SqlConnection(connstr);

  SqlCommand command = new SqlCommand(sql, connection);

  connection.Open();

  SqlDataReader dr = command.ExecuteReader();

  if(dr.Read())

  {

  Response.ContentType = dr["imgtype"].ToString();

  Response.BinaryWrite( (byte[]) dr["imgdata"] );

  }

  connection.Close();

  }

  要注意的是Response.BinaryWrite 而不是Response.Write.

  下面给大家一个用于C# Winform的存入、读取程序。其中不同请大家自己比较!(为了方便起见,我将数据库字段简化为二个:imgtitle和imgdata。

  using System;

  using System.Drawing;

  using System.Collections;

  using System.ComponentModel;

  using System.Windows.Forms;

  using System.Data;

  using System.IO;

  using System.Data.SqlClient;

  namespace WindowsApplication21

  {

  ///

  /// Form1 的摘要说明。

  ///

  public class Form1 : System.Windows.Forms.Form

  {

  private System.Windows.Forms.Button button1;

  ///

  /// 必需的设计器变量。

  ///

  private System.ComponentModel.Container components = null;

  private string ConnectionString = "Integrated Security=SSPI;Initial Catalog=;DataSource=localhost;";

  private SqlConnection conn = null;

  private SqlCommand cmd = null;

  private System.Windows.Forms.Button button2;

  private System.Windows.Forms.PictureBox pic1;

  private System.Windows.Forms.OpenFileDialog openFileDialog1;

  private string sql = null;

  private System.Windows.Forms.Label label2;

  private string nowId=null;

  public Form1()

  {

  //

  // Windows 窗体设计器支持所必需的

  //

  InitializeComponent();

  conn = new SqlConnection(ConnectionString);

  //

  // TODO: 在 InitializeComponent 调用后添加任何构造函数代码

  //

  }

  ///

  /// 清理所有正在使用的资源。

  ///

  protected override void Dispose( bool disposing )

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!