选择显示字体大小

asp.net如何存取sql server数据库图片

  sql server提供了一个特别的数据类型:image,它是一个包含binary数据的类型。下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法。在这篇文章中我们要看到如何在sql server中存储和读取图片。

  1、建立一个表:

  在sql server中建立这样结构的一个表:

列名 类型目的
id integer 主键id
imgtitle varchar(50) 图片的标题
imgtype varchar(50)图片类型. asp.net要以辨认的类型
imgdataimage用于存储二进制数据

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

}

}
}


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons