教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
  网站导航: 库库中文网 · 网站编程教程 · ASP.NET教程 · Asp.NET数据库操作  

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

教程推荐
『ASP.NET怎么样存取SQL Server数据库图片』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2006-3-2 

  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 );

 }

 #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();

}

}
}


】【关闭窗口
  上一页:
  下一页:后面的文章暂时没有更新了,请多关注QQgb.com
Asp.NET数据库操作:相关文章
Asp.NET数据库操作点击榜
推荐教程Flash Remoting For .Net 地跨域
推荐教程通过查询说明器对比SQL语句地执
推荐教程Enterprise Library 2.0 -- Dat
推荐教程在程序里面书写SQL语句
推荐教程两个关于.NET读取EXCEL文件地疑
推荐教程征集佳句-精妙SQL语句收集
普通教程ASP.NET完成数据图表
普通教程ASP.NET中运用SQLXML WEB服务访
普通教程ASP.NET怎么样存取SQL Server数
普通教程ASP.NET服务器端异步Web办法
PHOTOSHOP - 基础教程 抠图专题 蒙版专题 3DsMax 基础 设计实例 Maya设计实例
3D设计教程
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright ? 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL. 电脑硬件 电脑知识 教程学习
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光