亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

通過ADO.NET存取文件

2019-11-18 17:06:39
字體:
來源:轉載
供稿:網友

有時我們需要把一些大的數據對象如圖片、可執行文件、視頻和文檔等數據存入數據庫。在MS SQL Server中,這要用到Image數據類型,可以保存多達2G的數據。以下給出一個通過ADO.NET和MS SQL Server實現的小小的例子。

先創建一個測試數據表。
在查詢分析器中輸入并執行以下語句:
Create table [imgtable](
 [imgid] [int] IDENTITY(1,1) NOT NULL,
 [imgname] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
 [imgData] [image] NULL,
 PRIMARY KEY CLUSTERED
 (
 [imgid]
 ) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

這要在你所選的數據庫中就多了一個名叫imgtable的表。

VS中的代碼如下:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
using System.IO;

namespace ADO_Demo
{
 /// <summary>
 /// Form1 的摘要說明。
 /// </summary>
 public class ADO_Demo : System.Windows.Forms.Form
 {
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.Button button2;
  private System.Windows.Forms.PictureBox pictureBox1;
  private System.Windows.Forms.OpenFileDialog openFileDialog1;
  private System.Windows.Forms.Button button3;
  /// <summary>
  /// 必需的設計器變量。
  /// </summary>
  private System.ComponentModel.Container components = null;

  public ADO_Demo()
  {
   //
   // Windows 窗體設計器支持所必需的
   //
   InitializeComponent();

   //
   // TODO: 在 InitializeComponent 調用后添加任何構造函數代碼
   //
  }

  /// <summary>
  /// 清理所有正在使用的資源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  #region Windows 窗體設計器生成的代碼
  /// <summary>
  /// 設計器支持所需的方法 - 不要使用代碼編輯器修改
  /// 此方法的內容。
  /// </summary>
  private void InitializeComponent()
  {
   this.button1 = new System.Windows.Forms.Button();
   this.button2 = new System.Windows.Forms.Button();
   this.pictureBox1 = new System.Windows.Forms.PictureBox();
   this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
   this.button3 = new System.Windows.Forms.Button();
   this.SuspendLayout();
   //
   // button1
   //
   this.button1.Location = new System.Drawing.Point(368, 48);
   this.button1.Name = "button1";
   this.button1.Size = new System.Drawing.Size(104, 23);
   this.button1.TabIndex = 0;
   this.button1.Text = "保存圖片";
   this.button1.Click += new System.EventHandler(this.button1_Click);
   //
   // button2
   //
   this.button2.Location = new System.Drawing.Point(368, 120);
   this.button2.Name = "button2";
   this.button2.Size = new System.Drawing.Size(104, 23);
   this.button2.TabIndex = 1;
   this.button2.Text = "顯示圖片";
   this.button2.Click += new System.EventHandler(this.button2_Click);
   //
   // pictureBox1
   //
   this.pictureBox1.Location = new System.Drawing.Point(8, 16);
   this.pictureBox1.Name = "pictureBox1";
   this.pictureBox1.Size = new System.Drawing.Size(312, 288);
   this.pictureBox1.TabIndex = 2;
   this.pictureBox1.TabStop = false;
   //
   // openFileDialog1
   //
   this.openFileDialog1.FileOk += new System.ComponentModel.CancelEventHandler(this.openFileDialog1_FileOk);
   //
   // button3
   //
   this.button3.Location = new System.Drawing.Point(368, 200);
   this.button3.Name = "button3";
   this.button3.Size = new System.Drawing.Size(104, 23);
   this.button3.TabIndex = 1;
   this.button3.Text = "讀取文件并打開";
   this.button3.Click += new System.EventHandler(this.button3_Click);
   //
   // ADO_Demo
   //
   this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
   this.ClientSize = new System.Drawing.Size(496, 317);
   this.Controls.Add(this.pictureBox1);
   this.Controls.Add(this.button2);
   this.Controls.Add(this.button1);
   this.Controls.Add(this.button3);
   this.Name = "ADO_Demo";
   this.Text = "ADO_Demo";
   this.ResumeLayout(false);

  }
  #endregion

  /// <summary>
  /// 應用程序的主入口點。
  /// </summary>
  [STAThread]
  static void Main()
  {
   application.Run(new ADO_Demo());
  }

  /// <summary>
  /// 點擊打開文件對話框確定按鈕,將文件保存到數據庫中
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void openFileDialog1_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
  {
   string filename = this.openFileDialog1.FileName;
   SqlConnection conn = new SqlConnection("server=192.168.2.200;integrated security = sspi;database = northwind");
   SqlCommand cmd = new SqlCommand("insert imgtable values(@imgname,@imgData)",conn);
   SqlParameter pm = new SqlParameter("@imgname",SqlDbType.VarChar,100);
   pm.Value = filename;
   SqlParameter pm1 = new SqlParameter("@imgData",SqlDbType.Image);
   FileStream fs = new FileStream(filename,FileMode.Open);
   int len = (int)fs.Length;
   byte[] fileData = new byte[len];
   fs.Read(fileData,0,len);
   fs.Close();

   pm1.Value = fileData;
   cmd.Parameters.Add(pm);
   cmd.Parameters.Add(pm1);

   conn.Open();
   try
   {
    cmd.ExecuteNonQuery();
   }
   catch(Exception ex)
   {
    MessageBox.Show(ex.Message);
   }


  }

  private void button1_Click(object sender, System.EventArgs e)
  {
   this.openFileDialog1.ShowDialog();
  }

  /// <summary>
  /// 從數據庫中讀取bitmap圖片并顯示
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void button2_Click(object sender, System.EventArgs e)
  {
   SqlConnection conn = new SqlConnection("server=192.168.2.200;integrated security = sspi;database = northwind");
   SqlCommand cmd = new SqlCommand("select * from imgtable where imgname like '%bmp%'",conn);
   conn.Open();
   SqlDataReader dr;
   try
   {
    dr = cmd.ExecuteReader();
    dr.Read();
    System.Data.SqlTypes.SqlBinary sb = dr.GetSqlBinary(2);
    //或byte[] imageData = (byte[])dr[2];
    MemoryStream ms = new MemoryStream(sb.Value);//在內存中操作圖片數據
    Bitmap bmp = new Bitmap(Bitmap.FromStream(ms));
    this.pictureBox1.Image = bmp;
    dr.Close();
   }
   catch(Exception ex)
   {
    MessageBox.Show(ex.Message);
   }
   finally
   {
    conn.Close();
   }
  }

  /// <summary>
  /// 讀取文件并保存到硬盤,然后打開文件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void button3_Click(object sender, System.EventArgs e)
  {
   SqlConnection conn = new SqlConnection("server=192.168.2.200;integrated security = sspi;database = northwind");
   SqlCommand cmd = new SqlCommand("select * from imgtable where imgname like '%doc'",conn);
   conn.Open();
   SqlDataReader dr;
   try
   {
    dr = cmd.ExecuteReader();
    dr.Read();
    System.Data.SqlTypes.SqlBinary sb = dr.GetSqlBinary(2);
    //或byte[] imageData = (byte[])dr[2];
    //FileStream fs = new FileStream(@"C:/temp.bmp",FileMode.Create);
    string filename = @"C:/" + System.IO.Path.GetFileName(dr.GetString(1));
    FileStream fs = new FileStream(filename,FileMode.Create);
    fs.Write(sb.Value,0,sb.Value.Length);
    fs.Close();
    //this.pictureBox1.Image = Image.FromFile(@"C:/temp.bmp");
    System.Diagnostics.Process.Start(filename);
    dr.Close();
   }
   catch(Exception ex)
   {
    MessageBox.Show(ex.Message);
   }
   finally
   {
    conn.Close();
   }
  }
 }
}

直接把整個文件讀取到內存中的數組里對于小文件來說是沒問題的,但如果是大文件,特別是大小都超過了物理內存的文件,可能會導致嚴重的內存問題,需要分段讀取,并分段寫到數據庫。

http://maxianghui.VEVb.com/archive/2006/07/12/448943.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97av在线视频免费播放| 亚洲国产精品va| 久久久精品国产网站| 欧美日韩另类视频| 亚洲国产小视频在线观看| 久久久av亚洲男天堂| 欧美午夜精品在线| 日韩免费观看av| 亚洲免费福利视频| 亚洲自拍偷拍在线| **欧美日韩vr在线| 国产一区二区在线播放| 成人精品一区二区三区电影免费| 亚洲新中文字幕| 欧美午夜电影在线| 国产一区二区视频在线观看| 欧美性xxxx极品高清hd直播| 亚洲视频自拍偷拍| 日韩在线观看免费全集电视剧网站| 久久久视频精品| 日韩精品小视频| 精品五月天久久| 亚洲精品www久久久久久广东| 隔壁老王国产在线精品| 国产精品揄拍一区二区| 自拍亚洲一区欧美另类| 精品久久久久久久久久久久久| 久久久国产精品亚洲一区| 国语自产精品视频在线看一大j8| 成人黄色免费网站在线观看| 欧美日韩在线视频一区| 欧美小视频在线| 久久久久久久久久久av| 亚洲自拍偷拍色片视频| 欧美中文在线免费| 欧美成人免费全部观看天天性色| 日本高清视频精品| 国产伦精品免费视频| 日韩av在线播放资源| 国产精品久久久久久亚洲影视| 影音先锋欧美精品| 国产精品一区二区久久久久| 色青青草原桃花久久综合| 日韩一区二区精品视频| 正在播放欧美一区| 97av在线视频| 色综合久久久888| 午夜精品99久久免费| 亚洲一区二区三区四区视频| 久久五月情影视| 欧洲午夜精品久久久| 欧美成人三级视频网站| 国产欧美一区二区三区久久人妖| 亚洲欧美国产日韩中文字幕| 操91在线视频| 美日韩丰满少妇在线观看| 一本色道久久88亚洲综合88| 国产精品久久999| 欧美极品少妇xxxxⅹ免费视频| 欧美理论片在线观看| 国产美女直播视频一区| 国产99久久精品一区二区永久免费| 国产精品成人免费电影| 91精品国产亚洲| 欧美特黄级在线| 奇米4444一区二区三区| 日韩女优人人人人射在线视频| 成人高h视频在线| 色综合91久久精品中文字幕| 国产精品劲爆视频| 欧美成人精品激情在线观看| 久久精品一本久久99精品| 亚洲影影院av| 欧美在线一区二区三区四| 66m—66摸成人免费视频| 亚洲欧美综合区自拍另类| 欧美精品一区二区免费| 国模视频一区二区三区| 国产综合香蕉五月婷在线| 亚洲激情视频网站| 91地址最新发布| 国产精品午夜一区二区欲梦| 亚洲精品国产精品久久清纯直播| 欧美电影在线免费观看网站| 日韩在线免费视频| 欧美精品第一页在线播放| 91高清在线免费观看| 成人高h视频在线| 久久天天躁狠狠躁夜夜躁| 国外成人在线视频| 日韩在线播放一区| 亚洲国产精品成人精品| 精品视频在线播放免| 97视频在线观看成人| 亚洲黄色在线看| 国产精品欧美日韩久久| 国产精品直播网红| 国语自产精品视频在免费| 亚洲影院污污.| 亚洲美女av网站| 欧美高清视频一区二区| 午夜精品理论片| 亚洲成人xxx| 91亚洲永久免费精品| 播播国产欧美激情| 一本大道亚洲视频| 亚洲无限乱码一二三四麻| 午夜精品三级视频福利| 国产97在线亚洲| 欧美日韩另类视频| 亚洲欧美激情在线视频| 韩国精品美女www爽爽爽视频| 欧美黑人极品猛少妇色xxxxx| 亚洲欧美国产视频| 成人写真福利网| 91久热免费在线视频| 一个人www欧美| 亚洲自拍偷拍区| 91亚洲精品在线观看| 久久精品国产成人精品| 成人性教育视频在线观看| 亚洲国产天堂网精品网站| 国产中文字幕91| 国产综合福利在线| 日本在线观看天堂男亚洲| 国产成人aa精品一区在线播放| 中文字幕亚洲激情| 最新69国产成人精品视频免费| 国产网站欧美日韩免费精品在线观看| 日韩视频在线观看免费| 久久精品人人做人人爽| 国产啪精品视频| 国产精品劲爆视频| 国产精品久久久av久久久| 日本国产欧美一区二区三区| 日韩精品极品在线观看| 97av在线视频| 亚洲精品白浆高清久久久久久| 国产中文字幕91| 大荫蒂欧美视频另类xxxx| 欧美激情a∨在线视频播放| www.日韩系列| 亚洲色图15p| 国产手机视频精品| 97人洗澡人人免费公开视频碰碰碰| 欧美日韩高清区| 在线观看日韩www视频免费| 亚洲成人久久一区| 欧美日本高清视频| 高跟丝袜欧美一区| 国产一区二区丝袜高跟鞋图片| 国产一区二区三区在线观看视频| 亚洲人精品午夜在线观看| 欧美夫妻性视频| 国产精品com| 欧美性猛交xxxx黑人猛交| 国产精品爽黄69天堂a| 亚洲最大福利视频网| 久久九九国产精品怡红院| 国产午夜精品一区二区三区| 美日韩丰满少妇在线观看| 欧美床上激情在线观看| 最新69国产成人精品视频免费| 国产精品美腿一区在线看|