分享
 
 
 

通过ADO.NET存取文件

王朝c#·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

时我们需要把一些大的数据对象如图片、可执行文件、视频和文档等数据存入数据库。在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));

th

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有