ASP.NET如何存取SQL Server資料庫圖片

來源:互聯網
上載者:User
asp.net|server|資料|資料庫

    SQL Server提供了一個特別的資料類型:image,它是一個包含binary資料的類型。下邊這個例子就向你展示了如何將文本或照片放入到資料庫中的辦法。在這篇文章中我們要看到如何在SQL Server中儲存和讀取圖片。 
   
     1、建立一個表:
  
    在SQL SERVER中建立這樣結構的一個表:
  
  列名 類型 目的
  ID Integer 主鍵ID
  IMGTITLE Varchar(50) 圖片的標題
  IMGTYPE Varchar(50) 圖片類型. ASP.net要以辨認的類型
  IMGDATA Image 用於儲存位元據
  
    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
  {
   /// <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 );
  
   }
 

[1] [2] 下一頁  



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。