ASP.NET如何存取 SQLServer数据库图片
SQL Server提供了一个特别的数据类型 image 它是一个包含binary数据的类型 下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法 在这篇文章中我们要看到如何在SQL Server中存储和读取图片 建立一个表 在SQL SERVER中建立这样结构的一个表
列名 类型 目的 ID Integer 主键ID IMGTITLE Varchar( ) 图片的标题 IMGTYPE Varchar( ) 图片类型 ASP NET要以辨认的类型 IMGDATA Image 用于存储二进制数据 IMGTYPE Varchar( ) 图片类型 ASP NET要以辨认的类型 IMGDATA Image 用于存储二进制数据
存储图片到SQL SERVER数据库中 为了能存储到表中 你首先要上传它们到你的WEB 服务器上 你可以开发一个web form 它用来将客户端中TextBox web control中的图片入到你的WEB服务器上来 将你的 encType 属性设置为 myltipart/formdata Stream imgdatastream = File PostedFile InputStream; int imgdatalen = File PostedFile ContentLength; string imgtype = File PostedFile ContentType; string imgtitle = TextBox Text; byte[] imgdata = new byte[imgdatalen]; int n = imgdatastream Read(imgdata imgdatalen); string connstr=((NameValueCollection)Context GetConfig( appSettings ))[ connstr ]; SqlConnection connection = new SqlConnection(connstr); SqlCommand mand = new SqlCommand ( INSERT INTO ImageStore(imgtitle imgtype imgdata) VALUES ( @imgtitle @imgtype @imgdata ) connection ); SqlParameter paramTitle = new SqlParameter ( @imgtitle SqlDbType VarChar ); paramTitle Value = imgtitle; mand Parameters Add( paramTitle); SqlParameter paramData = new SqlParameter( @imgdata SqlDbType Image ); paramData Value = imgdata; mand Parameters Add( paramData ); SqlParameter paramType = new SqlParameter( @imgtype SqlDbType VarChar ); paramType Value = imgtype; mand Parameters Add( paramType ); connection Open(); int numRowsAffected = mand ExecuteNonQuery(); connection Close(); 从数据库中恢复读取 现在让我们来从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 mand = new SqlCommand(sql connection); connection Open(); SqlDataReader dr = mand 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 WindowsApplication { /// <summary> /// Form 的摘要说明 /// </summary> public class Form : System Windows Forms Form { private System Windows Forms Button button ; /// <summary> /// 必需的设计器变量 /// </summary> private System ComponentModel Container ponents = 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 button ; private System Windows Forms PictureBox pic ; private System Windows Forms OpenFileDialog openFileDialog ; private string sql = null; private System Windows Forms Label label ; private string nowId=null; public Form () { // // 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 (ponents != null) { ponents Dispose(); } } base Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// 设计器支持所需的方法 不要使用代码编辑器修改 /// 此方法的内容 /// </summary> private void InitializeComponent() { this button = new System Windows Forms Button(); this pic = new System Windows Forms PictureBox(); this button = new System Windows Forms Button(); this openFileDialog = new System Windows Forms OpenFileDialog(); this label = new System Windows Forms Label(); this SuspendLayout(); // // button // this button Location = new System Drawing Point( ); this button Name = button ; this button Size = new System Drawing Size( ); this button TabIndex = ; this button Text = 加入新的图片 ; this button Click += new System EventHandler(this button _Click); // // pic // this pic Location = new System Drawing Point( ); this pic Name = pic ; this pic Size = new System Drawing Size( ); this pic TabIndex = ; this pic TabStop = false; // // button // this button Location = new System Drawing Point( ); this button Name = button ; this button Size = new System Drawing Size( ); this button TabIndex = ; this button Text = 从数据库中恢复图像 ; this button Click += new System EventHandler(this button _Click); // // openFileDialog // this openFileDialog Filter = 图像文件(* jpg * bmp * gif)|* jpg|* bmp|* gif ; // // label // this label Location = new System Drawing Point( ); this label Name = label ; this label Size = new System Drawing Size( ); this label TabIndex = ; // // Form // this AutoScaleBaseSize = new System Drawing Size( ); this ClientSize = new System Drawing Size( ); this Controls AddRange(new System Windows Forms Control[] { this label this button this pic this button }); this Name = Form ; this Text = Form ; this Load += new System EventHandler(this Form _Load); this ResumeLayout(false); } #endregion
lishixinzhi/Article/program/net/201311/11512