电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> 数据库
ASP.NET如何存取SQL Server数据库图片-.NET教程,Asp.Net开发
作者:网友供稿 点击:43
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
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();

}

}
}


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·数据库开发个人总结(ADO.NET小结)-.NET教程,数据库应用
·怎么由DataSet将数据导入Excel?-.NET教程,数据库应用
·动态创建SQL Server数据库、表、存储过程-ASP教程,数据库相关
·Win32环境下动态链接库(DLL)编程原理-.NET教程,数据库应用
·封装的ADO.NET对数据库操作经典类-.NET教程,数据库应用
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·DataGrid使用心得(附大量代码)-ASP教程,数据库相关
·用代码创建DataGrid的多链接及checkbox事件响应-.NET教程,数据库应用
·ADO.NET 的最佳实践技巧-.NET教程,数据库应用
·转载: 用纯ASP代码实现图片上传并存入数据库中

最新文章
·根据数据表中数据,生成Powerpoint幻灯片-ASP教程,数据库相关
·DataGrid中的按钮反选事件与NamingContainer(命名容器)-downmoon-ASP教程,数据库相关
·使用用VB处理MYSQL数据库中二进制数据问题-.NET教程,VB.Net语言
·关于DataGridView中如何接收处于编辑状态下的当前信息-ASP教程,数据库相关
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·.net下访问Access数据库需要注意的问题-.NET教程,Asp.Net开发
·ActiveMQ4.1+Spring2.0的POJO JMS方案(上)-.NET教程,数据库应用
·ASP.NET 2.0中直接将Access数据库导入到Excel文件中-.NET教程,Asp.Net开发
·NET(C#)连接各类数据库-集锦-.NET教程,C#语言
·ASP.NET2.0连接SQL Server数据库详解-.NET教程,Asp.Net开发


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号