您的位置:首页技术开发.Net 专栏 → ASP.NET存取SQL Server数据库图片

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

时间:2009/12/21 9:24:00来源:本站整理作者:我要评论(0)

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

  1、建立一个表:

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


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

  为了能存储到表中,你首先要上传它们到你的WEB 服务器 href="http://product.it168.com/files/0402search.shtml" target=_blank>服务器上,你可以开发一个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
  {
   /// <summary>
   /// Form1 的摘要说明。
   /// </summary>
   public class Form1 : System.Windows.Forms.Form
   {
    private System.Windows.Forms.Button button1;
    /// <summary>
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.Container components = null;
    private string ConnectionString = "Integrated Security=SSPI;Initial Catalog=;Data Source=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 调用后添加任何构造函数代码
    //
   }
  
   /// <summary>
   /// 清理所有正在使用的资源。
   /// </summary>
   protected override void Dispose( bool disposing )
   {
    if (conn.State == ConnectionState.Open)
     conn.Close();
    if( disposing )
    {
     if (components != null)
     {
      components.Dispose();
     }
    }
    base.Dispose( disposing );
  
   } #region Windows Form Designer generated code
   /// <summary>
   /// 设计器支持所需的方法 - 不要使用代码编辑器修改
   /// 此方法的内容。
   /// </summary>
   private void InitializeComponent()
   {
    this.button1 = new System.Windows.Forms.Button();
    this.pic1 = new System.Windows.Forms.PictureBox();
    this.button2 = new System.Windows.Forms.Button();
    this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
    this.label2 = new System.Windows.Forms.Label();
    this.SuspendLayout();
    //
    // button1
    //
    this.button1.Location = new System.Drawing.Point(0, 40);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(264, 48);
    this.button1.TabIndex = 0;
    this.button1.Text = "加入新的图片";
    this.button1.Click += new System.EventHandler(this.button1_Click);
    //
    // pic1
    //
    this.pic1.Location = new System.Drawing.Point(280, 8);
    this.pic1.Name = "pic1";
    this.pic1.Size = new System.Drawing.Size(344, 264);
    this.pic1.TabIndex = 3;
    this.pic1.TabStop = false;
    //
    // button2
    //
    this.button2.Location = new System.Drawing.Point(0, 104);
    this.button2.Name = "button2";
    this.button2.Size = new System.Drawing.Size(264, 40);
    this.button2.TabIndex = 4;
    this.button2.Text = "从数据库中恢复图像";
    this.button2.Click += new System.EventHandler(this.button2_Click);
    //
    // openFileDialog1
    //
    this.openFileDialog1.Filter = "\"图像文件(*.jpg,*.bmp,*.gif)|*.jpg|*.bmp|*.gif\"";
    //
    // label2
    //
    this.label2.Location = new System.Drawing.Point(0, 152);
    this.label2.Name = "label2";
    this.label2.Size = new System.Drawing.Size(264, 48);
    this.label2.TabIndex = 5;
    //
    // Form1
    //
    this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
    this.ClientSize = new System.Drawing.Size(632, 273);
    this.Controls.AddRange(new System.Windows.Forms.Control[] {
      this.label2,
      this.button2,
      this.pic1,
      this.button1});
    this.Name = "Form1";
    this.Text = "Form1";
    this.Load += new System.EventHandler(this.Form1_Load);
    this.ResumeLayout(false);
  
   }
   #endregion
   
   /// <summary>
   /// 应用程序的主入口点。
   /// </summary>
   [STAThread]
   static void Main()
   {
    Application.Run(new Form1());
   }
  
   private void button1_Click(object sender, System.EventArgs e)
   {
    openFileDialog1.ShowDialog ();
    
    if (openFileDialog1.FileName.Trim()!="")
    {
     FileInfo fi = new FileInfo(openFileDialog1.FileName);
  
     string imgtitle=openFileDialog1.FileName;
     int imgdatalen=(int)fi.Length;
     byte[] imgdata = new byte[imgdatalen];
    
     Stream imgdatastream=fi.OpenRead();
     int n=imgdatastream.Read(imgdata,0,imgdatalen);
  
     if( conn.State == ConnectionState.Open)
      conn.Close();
     ConnectionString ="Integrated Security=SSPI;" + "Initial Catalog=mydb;" +"Data  Source=localhost;";
     conn.ConnectionString = ConnectionString;
   try
   {
    string mySelectQuery = "INSERT INTO ImageStore(imgtitle,imgdata) VALUES (@imgtitle, @imgdata )";
    //string mySelectQuery="UPDATE ImageStore set imgtitle=@imgtitle,imgdata=@imgdata" ;
    SqlCommand myCommand = new SqlCommand(mySelectQuery, conn);
  
    SqlParameter paramTitle = new SqlParameter("@imgtitle", SqlDbType.VarChar,50 );
    paramTitle.Value = imgtitle;
    myCommand.Parameters.Add( paramTitle);
  
    SqlParameter paramData = new SqlParameter( "@imgdata", SqlDbType.Image );
    paramData.Value = imgdata;
    myCommand.Parameters.Add( paramData );
  
    conn.Open();
    int numRowsAffected = myCommand.ExecuteNonQuery();
    conn.Close();
   }
   catch(Exception err)
   {
    MessageBox.Show("您输入名称可能在数据库中已存在或输入为空,请检查!"+err.ToString() );
   }
   finally
   {}
  }
  
  }
   private void Form1_Load(object sender, System.EventArgs e)
   {
   }
  
   private void button2_Click(object sender, System.EventArgs e)
   {
    //打开数据库连接
    if( conn.State == ConnectionState.Open)
     conn.Close();
    ConnectionString ="Integrated Security=SSPI;" + "Initial Catalog=mydb;" +"Data Source=localhost;";
    conn.ConnectionString = ConnectionString;
  
    // 创建数据适配器
    string sql="SELECT * FROM ImageStore" ;
    SqlCommand command = new SqlCommand(sql, conn);
   
    try
    {conn.Open();}
    catch(Exception newerr)
    {
     MessageBox.Show(" 不能打开数据联接!") ;
    }
    finally
    {}
  
    SqlDataReader dr = command.ExecuteReader();
    if(dr.Read())
    {
     FileInfo fi = new FileInfo("temp");
     FileStream myStream=fi.Open(FileMode.Create);
     byte[] mydata=((byte[])dr["imgdata"]);
     //label2.Text="您现在看到的是:"+ dr["imgtitle"].ToString();
     foreach(byte a in mydata)
     {
      myStream.WriteByte(a);
     }
    myStream.Close();
    Image myImage=Image.FromFile("temp") ;
    pic1.Image=myImage;
    pic1.Refresh();
    dr.Close ();
  
   }
   else
   {
    MessageBox.Show("没有成功读入数据!") ;
   
   }
  
   conn.Close();
  
  }
  
  }
  }

 

相关视频

    没有数据

相关阅读 ie6下面asp.net mvc3 部署应用程序在asp.net mvc中实现右键菜单和简单的分页教程ASP.NET中MVC框架模式方法如何实现分享ASP.NET 2.0 中保护机密数据ASP.NET配置文件Web.configASP.NET 2.0 AJAX中Webservice调用方法ASP.NET 的安全认证实现ASP.NET生成随机密码功能

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 什么是.NET中的TDD?ASP.NET AJAX入门简介 WebMatrix入门教程VC++2008中如何调用GetOpenFileName打开文件PlaySound函数在VC++6.0中如何播放音乐及声请问VC++回调函数怎么用

人气排行 嵌入式实时操作系统VxWorks入门教程ArrayList 与 string、string[] 的转换C#遍历整个文件夹及子目录的文件代码WebMatrix入门教程asp.net判断文件或文件夹是否存在c#判断数据NULL值的方法vc++6.0怎么写Windows简单窗口代码.net解决数据导出excel时的格式问题