如何在 SQL Server2000 中保存图像及读取图像信息

server

////////////////////////////////////////////////////////////////////////////////
//Author: stardicky //
//E-mail: stardicky@hotmail.com //
//QQNumber: 9531511 //
//CompanyName: Ezone International //
//Class: HBS-0308 //
//title: 如何在 SQL Server2000 中保存保存图像及读取图像信息 //
////////////////////////////////////////////////////////////////////////////////
//注意:运行这实例的之前需要在查询分析器中执行下列SQL语句: //
//CREATE DATABASE EzoneDb //
//go //
//USE EzoneDb //
//go //
//CREATE TABLE [Images] ( //
//[ImageID] [int] IDENTITY (1, 1) NOT NULL , //
//[Description] [nvarchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , //
//[ImageFile] [image] NULL , //
//[ImageSize] [int] NULL , //
//[ImageType] [nvarchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL //
//) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] //
//GO //
////////////////////////////////////////////////////////////////////////////////

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.IO;

namespace EzoneImageInSQL
{
public class frmMain : System.Windows.Forms.Form
{
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Data.SqlClient.SqlConnection MySqlCon;
private System.Windows.Forms.Label labFilePath;
private System.Windows.Forms.TextBox txtFilePath;
private System.Windows.Forms.Button btnUpload;
private System.Windows.Forms.PictureBox ImgPictureBox;
private System.Windows.Forms.Button btnDownLoad;
private System.Windows.Forms.Label labDescription;
private System.Windows.Forms.TextBox txtImage;

private System.ComponentModel.Container components = null;

public frmMain()
{

InitializeComponent();

}

protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

private void InitializeComponent()
{
this.labFilePath = new System.Windows.Forms.Label();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.txtFilePath = new System.Windows.Forms.TextBox();
this.btnUpload = new System.Windows.Forms.Button();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.ImgPictureBox = new System.Windows.Forms.PictureBox();
this.btnDownLoad = new System.Windows.Forms.Button();
this.MySqlCon = new System.Data.SqlClient.SqlConnection();
this.labDescription = new System.Windows.Forms.Label();
this.txtImage = new System.Windows.Forms.TextBox();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.SuspendLayout();
//
// labFilePath
//
this.labFilePath.Location = new System.Drawing.Point(8, 72);
this.labFilePath.Name = "labFilePath";
this.labFilePath.Size = new System.Drawing.Size(80, 16);
this.labFilePath.TabIndex = 0;
this.labFilePath.Text = "文件路径:";
this.labFilePath.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// groupBox1
//
this.groupBox1.Controls.Add(this.txtImage);
this.groupBox1.Controls.Add(this.labDescription);
this.groupBox1.Controls.Add(this.btnUpload);
this.groupBox1.Controls.Add(this.txtFilePath);
this.groupBox1.Controls.Add(this.labFilePath);
this.groupBox1.Location = new System.Drawing.Point(8, 8);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(280, 128);
this.groupBox1.TabIndex = 1;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "文件上传给数据库";
//
// txtFilePath
//
this.txtFilePath.Location = new System.Drawing.Point(72, 64);
this.txtFilePath.Name = "txtFilePath";
this.txtFilePath.Size = new System.Drawing.Size(200, 21);
this.txtFilePath.TabIndex = 1;
this.txtFilePath.Text = "";
//
// btnUpload
//
this.btnUpload.Location = new System.Drawing.Point(192, 96);
this.btnUpload.Name = "btnUpload";
this.btnUpload.TabIndex = 2;
this.btnUpload.Text = "开始上传";
this.btnUpload.Click += new System.EventHandler(this.btnUpload_Click);
//
// groupBox2
//
this.groupBox2.Controls.Add(this.btnDownLoad);
this.groupBox2.Controls.Add(this.ImgPictureBox);
this.groupBox2.Location = new System.Drawing.Point(8, 144);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(280, 200);
this.groupBox2.TabIndex = 2;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "从数据库下载图像文件并预览图像";
//
// ImgPictureBox
//
this.ImgPictureBox.Location = new System.Drawing.Point(16, 24);
this.ImgPictureBox.Name = "ImgPictureBox";
this.ImgPictureBox.Size = new System.Drawing.Size(168, 160);
this.ImgPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.ImgPictureBox.TabIndex = 0;
this.ImgPictureBox.TabStop = false;
//
// btnDownLoad
//
this.btnDownLoad.Location = new System.Drawing.Point(192, 24);
this.btnDownLoad.Name = "btnDownLoad";
this.btnDownLoad.TabIndex = 1;
this.btnDownLoad.Text = "开始下载";
this.btnDownLoad.Click += new System.EventHandler(this.btnDownLoad_Click);
//
// MySqlCon 数据库的连接对象
//
this.MySqlCon.ConnectionString = "integrated security=SSPI;data source=.;persist security info=False;initial catalog=ezonedb";
//
// labDescription
//
this.labDescription.Location = new System.Drawing.Point(8, 32);
this.labDescription.Name = "labDescription";
this.labDescription.Size = new System.Drawing.Size(88, 16);
this.labDescription.TabIndex = 3;
this.labDescription.Text = "文件描述信息:";
this.labDescription.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// txtImage
//
this.txtImage.Location = new System.Drawing.Point(96, 24);
this.txtImage.Name = "txtImage";
this.txtImage.Size = new System.Drawing.Size(176, 21);
this.txtImage.TabIndex = 4;
this.txtImage.Text = "亿众国际 Ezone International";
//
// frmMain
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 349);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.Name = "frmMain";
this.Text = "Ezone International - 亿众国际";
this.groupBox1.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
this.ResumeLayout(false);

}

[STAThread]
static void Main()
{
Application.Run(new frmMain());
}

private void btnUpload_Click(object sender, System.EventArgs e)
{
try
{
//用文件的路径信息创建一个文件对象
FileInfo MyPicture=new FileInfo(this.txtFilePath.Text);
//检查文件的存在性
if(!MyPicture.Exists)
{
MessageBox.Show("文件不存在!");
}
else
{
//检查文件的扩展名,如果不符合要求就返回
switch(MyPicture.Extension.ToUpper())
{
case ".JPG":this.UpLoadImageFile(MyPicture);break;
case ".GIF":this.UpLoadImageFile(MyPicture);break;
case ".BMP":this.UpLoadImageFile(MyPicture);break;
default:MessageBox.Show("文件类型不正确!");break;
}
}
}
catch
{
MessageBox.Show("文件路径信息不正确!");
}
}

/// <summary>
/// 向数据库写入图像文件
/// </summary>
private void UpLoadImageFile(FileInfo obj)
{
try
{
//创建一字节数组,用来存储图像文件.(数组的长度是图像文件的长度)
byte[] Content=new byte[obj.Length];
//打开文件并用他初始化一个文件流对象
FileStream ImageFileStream=obj.OpenRead();
//将文件内容写入字节数组
ImageFileStream.Read(Content,0,Content.Length);
//关闭文件流
ImageFileStream.Close();

//创建一个Sql命令对象,用来插入记录
SqlCommand Command=new SqlCommand("INSERT Into Images(Description,ImageFile,ImageSize,ImageType) Values(@Description,@ImageFile,@ImageSize,@ImageType)",this.MySqlCon);

//图像的描述信息
SqlParameter imageDescriptionParameter=new SqlParameter("@Description",SqlDbType.NVarChar);
imageDescriptionParameter.Value=this.txtImage.Text;
Command.Parameters.Add(imageDescriptionParameter);

//图像的数据字节数组
SqlParameter imageFileParameter=new SqlParameter("@ImageFile",SqlDbType.Image);
imageFileParameter.Value=Content;
Command.Parameters.Add(imageFileParameter);

//图像的大小信息
SqlParameter imageSizeParameter=new SqlParameter("@ImageSize",SqlDbType.Int);
imageSizeParameter.Value=Content.Length;
Command.Parameters.Add(imageSizeParameter);

//图像的类型新信息
SqlParameter imageTypeParameter=new SqlParameter("@ImageType",SqlDbType.NVarChar);
imageTypeParameter.Value=obj.Extension;
Command.Parameters.Add(imageTypeParameter);

//打开数据库连接
this.MySqlCon.Open();
//执行 Sql 语句
Command.ExecuteNonQuery();
//关闭数据库连接
this.MySqlCon.Close();

MessageBox.Show("图像文件 " + obj.FullName + " 成功上传到数据库!");
}
catch(Exception Ezone)
{
MessageBox.Show(Ezone.Message);
}
}
/// <summary>
/// 从数据库读取图像
/// </summary>
private void btnDownLoad_Click(object sender, System.EventArgs e)
{
try
{
//创建一个Sql命令对象,用来查询记录
SqlCommand Command=new SqlCommand("select * from Images order by ImageID DESC",this.MySqlCon);
//打开数据库连接
this.MySqlCon.Open();
//执行Sql语句
SqlDataReader MyReader=Command.ExecuteReader(CommandBehavior.CloseConnection);

MyReader.Read();
//创建一个内存流对象并用ImageFile字段,ImageSize字段初始化他
MemoryStream MyMemoryStream=new MemoryStream((byte[])MyReader["ImageFile"],0,Convert.ToInt32(MyReader["ImageSize"]));
//创建一个 Image 对象,并赋值给 Picture对象的 Image 属性
this.ImgPictureBox.Image=Image.FromStream(MyMemoryStream);
//关闭内存流
MyMemoryStream.Close();
MyReader.Close();
}
catch(Exception Ezone)
{
MessageBox.Show(Ezone.Message);
}
}
}
}

时间: 2024-12-30 09:47:52

如何在 SQL Server2000 中保存图像及读取图像信息的相关文章

如何在SQL Server2000中处理半个汉字的问题

server|汉字|问题 /* written by enydraboy ,2003-07-17 *//*发表于CSDN *//* 转载请注明出处和保留此版权信息 */ 在csdn的专家论坛中,看到有一位朋友问起关于"由于从其它数据库中导入的数据存在半个汉字的问题,所以希望能在查询语句中将这半个汉字处理掉,怎么处理都行.望各位高手不吝赐教!"的问题,启初有点意外,但是后来觉得从这个问题可以带出一些SQL Server汉字中存储和处理的方法,觉得有必要总结一下. 汉字是由两个字节存储的,

如何在SQL Server中保存和输出图片

server 建表 为了试验这个例子你需要一个含有数据的table(你可以在现在的库中创建它,也可以创建一个新的数据库),下面是它的结构: Column Name Datatype Purpose ID Integer identity column Primary key IMGTITLE Varchar(50) Stores some user friendly title to identity the image IMGTYPE Varchar(50) Stores image cont

在SQL Server中保存和输出图片

server 介绍 有时候我们需要保存一些binary data进数据库.SQL Server提供一个叫做image的特殊数据类型供我们保存binary data.Binary data可以是图片.文档等.在这篇文章中我们将看到如何在SQL Server中保存和输出图片. 建表 为了试验这个例子你需要一个含有数据的table(你可以在现在的库中创建它,也可以创建一个新的数据库),下面是它的结构: Column Name Datatype Purpose ID Integer identity c

用VB存取SQL Server中的图像数据

本文介绍MIS SQL Server对图像数据的存储机制和存取方法.针对VB开发工具,介绍了一种通过ADO Field 对象的GetChunk 方法和AppendChunk 方法来存取MIS SQL Server中的图像数据的方法. 在一个完善的医院信息MIS中,图像数据的存取是必不可少的,比如X光片.CT像片的保存.一方面,这些图像数据在远程诊疗为准确诊断病情提供了重要的依据,另一方面,也为快速查阅病人资料提供了基本条件.图像数据的存取在其它应用系统如GIS中也有广泛的应用. 1.SQL Se

android-在 Android 中保存图像获得图像的路径

问题描述 在 Android 中保存图像获得图像的路径 我使用下面的代码把一个图像保存到SD card中,但是如何获得保存了的图像的路径,因为我想使用这个路径给下一个 activity 中的 ImageView 设置图像. 我试着使用onActivityResult(),但是不能获得路径.因为如果你想在浏览器文件夹中打开一个 intent,onActivitySesult()会被摧毁,但是我不想打开 gallery 或者 intent,就能访问获取文件路径. 请大家帮忙解决这个问题,谢谢. Pi

[Tip]如何在SQL*PLUS中插入含有&amp;amp;amp;的字符串?

插入|字符串 [Tip]如何在SQL*PLUS中插入含有'&'的字符串? 方法一在SQL*PLUS中用这个命令:set define off 方法二(推荐)参见如下的例子: SQL> truncate table demo; Table truncated. SQL> select * from demo; no rows selected SQL> desc demo;  Name                                      Null?    Ty

如何在SQL Server中构建数据仓库

[导读]本文介绍如何在SQL Server中构建简单的数据仓库,并分析相关的问题. 基本概念: 1.多维数据集:多维数据集是联机分析处理 (OLAP) 中的主要对象,是一项可对数据仓库中的数据进行快速访问的技术.多维数据集是一个数据集合,通常从数据仓库的子集构造,并组织和汇总成一个由一组维度和度量值定义的多维结构. 2.维度:是多维数据集的结构性特性.它们是事实数据表中用来描述数据的分类的有组织层次结构(级别).这些分类和级别描述了一些相似的成员集合,用户将基于这些成员集合进行分析. 3.度量值

android-在文件中保存图像的 byte 数组

问题描述 在文件中保存图像的 byte 数组 我使用下面的代码来获取一个 URL 文件的缩略图. MediaMetadataRetriever mmr = new MediaMetadataRetriever();mmr.setDataSource(URL);byte[] image = mmr.getEmbeddedPicture(); 我获得了缩略图的 byte 数组,然后我想把它保存为一个图像文件.如何实现? 解决方案 /** * 将图片写入到磁盘 * * @param img 图片数据流

sqlserver-如何在SQL server2012中附加2000的数据库?

问题描述 如何在SQL server2012中附加2000的数据库? 我知道不兼容,有没有什么方法变得兼容,比如说补丁什么的? 解决方案 你可以把2000的脚本全部生成出来,然后在2012执行,然后把数据导过去,也可以先装一个2008,把2000的库还原到上面,再备份出来还原到2012 解决方案二: 如果数据不多而且结构不复杂, 直接还原或者用发粪涂墙的, 如果多, 那还是先还原, 然后安排人测试吧, 没有什么非常省心的办法