存储图片到SQLSERVER数据库中.docx
《存储图片到SQLSERVER数据库中.docx》由会员分享,可在线阅读,更多相关《存储图片到SQLSERVER数据库中.docx(8页珍藏版)》请在冰点文库上搜索。
存储图片到SQLSERVER数据库中
如何存储图片到SQLSERVER数据库中
SQLServer提供了一个特别的数据类型:
image,它是一个包含binary数据的类型。
下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法。
在这篇文章中我们要看到如何在SQLServer中存储和读取图片。
1、建立一个表:
在SQLSERVER中建立这样结构的一个表:
列名类型目的
IDInteger主键ID
IMGTITLEVarchar(50)图片的标题
IMGTYPEVarchar(50)图片类型.ASP.NET要以辨认的类型
IMGDATAImage用于存储二进制数据
2、存储图片到SQLSERVER数据库中
为了能存储到表中,你首先要上传它们到你的WEB服务器上,你可以开发一个webform,它用来将客户端中TextBoxwebcontrol中的图片入到你的WEB服务器上来。
将你的encType属性设置为:
myltipart/formdata.
stringimgtitle=TextBox1.Text;
byte[]imgdata=newbyte[imgdatalen];
intn=imgdatastream.Read(imgdata,0,imgdatalen);
stringconnstr=((NameValueCollection)Context.GetConfig("appSettings"))["connstr"];
SqlConnectionconnection=newSqlConnection(connstr);
SqlCommandcommand=newSqlCommand
("INSERTINTOImageStore(imgtitle,imgtype,imgdata)
VALUES(@imgtitle,@imgtype,@imgdata)",connection);
SqlParameterparamTitle=newSqlParameter
("@imgtitle",SqlDbType.VarChar,50);
paramTitle.Value=imgtitle;
SqlParameterparamData=newSqlParameter("@imgdata",SqlDbType.Image);
paramData.Value=imgdata;
SqlParameterparamType=newSqlParameter("@imgtype",SqlDbType.VarChar,50);
paramType.Value=imgtype;
connection.Open();
intnumRowsAffected=command.ExecuteNonQuery();
connection.Close();
3、从数据库中恢复读取
现在让我们来从SQLServer中读取我们放入的数据吧!
我们将要输出图片到你的浏览器上,你也可以将它存放到你要的位置。
privatevoidPage_Load(objectsender,System.EventArgse)
{
stringimgid=Request.QueryString["imgid"];
stringconnstr=((NameValueCollection)
Context.GetConfig("appSettings"))["connstr"];
stringsql="SELECTimgdata,imgtypeFROMImageStoreWHEREid="+imgid;
SqlConnectionconnection=newSqlConnection(connstr);
SqlCommandcommand=newSqlCommand(sql,connection);
connection.Open();
SqlDataReaderdr=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。
usingSystem;
usingSystem.Drawing;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.IO;
namespaceWindowsApplication21
{
///<summary>
///Form1的摘要说明。
///</summary>
{
///<summary>
///必需的设计器变量。
///</summary>
privatestringConnectionString="IntegratedSecurity=SSPI;InitialCatalog=;Data Source=localhost;";
privateSqlConnectionconn=null;
privateSqlCommandcmd=null;
privatestringsql=null;
privatestringnowId=null;
publicForm1()
{
//
//Windows窗体设计器支持所必需的
//
InitializeComponent();
conn=newSqlConnection(ConnectionString);
//
//TODO:
在InitializeComponent调用后添加任何构造函数代码
//
}
///<summary>
///清理所有正在使用的资源。
///</summary>
protectedoverridevoidDispose(booldisposing)
{
if(conn.State==ConnectionState.Open)
conn.Close();
if(disposing)
{
if(components!
=null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#regionWindowsFormDesignergeneratedcode
///<summary>
///设计器支持所需的方法-不要使用代码编辑器修改
///此方法的内容。
///</summary>
privatevoidInitializeComponent()
{
this.SuspendLayout();
//
//button1
//
//
//pic1
//
//
//button2
//
//
//openFileDialog1
//
//
//label2
//
//
//Form1
//
this.label2,
this.button2,
this.pic1,
this.button1});
this.Name="Form1";
this.Text="Form1";
this.Load+=newSystem.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
///<summary>
///应用程序的主入口点。
///</summary>
[STAThread]
staticvoidMain()
{
Application.Run(newForm1());
}
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
openFileDialog1.ShowDialog();
{
FileInfofi=newFileInfo(openFileDialog1.FileName);
stringimgtitle=openFileDialog1.FileName;
intimgdatalen=(int)fi.Length;
byte[]imgdata=newbyte[imgdatalen];
Streamimgdatastream=fi.OpenRead();
intn=imgdatastream.Read(imgdata,0,imgdatalen);
if(conn.State==ConnectionState.Open)
conn.Close();
ConnectionString="IntegratedSecurity=SSPI;"+"InitialCatalog=mydb;"+"Data Source=localhost;";
conn.ConnectionString=ConnectionString;
try
{
stringmySelectQuery="INSERTINTOImageStore(imgtitle,imgdata)VALUES(@imgtitle,@imgdata)";
//stringmySelectQuery="UPDATEImageStoresetimgtitle=@imgtitle,imgdata=@imgdata";
SqlCommandmyCommand=newSqlCommand(mySelectQuery,conn);
SqlParameterparamTitle=newSqlParameter("@imgtitle",SqlDbType.VarChar,50);
paramTitle.Value=imgtitle;
SqlParameterparamData=newSqlParameter("@imgdata",SqlDbType.Image);
paramData.Value=imgdata;
conn.Open();
intnumRowsAffected=myCommand.ExecuteNonQuery();
conn.Close();
}
catch(Exceptionerr)
{
MessageBox.Show("您输入名称可能在数据库中已存在或输入为空,请检查!
"+err.ToString());
}
finally
{}
}
}
privatevoidForm1_Load(objectsender,System.EventArgse)
{
}
privatevoidbutton2_Click(objectsender,System.EventArgse)
{
//打开数据库连接
if(conn.State==ConnectionState.Open)
conn.Close();
ConnectionString="IntegratedSecurity=SSPI;"+"InitialCatalog=mydb;"+"DataSource=localhost;";
conn.ConnectionString=ConnectionString;
//创建数据适配器
stringsql="SELECT*FROMImageStore";
SqlCommandcommand=newSqlCommand(sql,conn);
try
{conn.Open();}
catch(Exceptionnewerr)
{
MessageBox.Show("不能打开数据联接!
");
}
finally
{}
SqlDataReaderdr=command.ExecuteReader();
if(dr.Read())
{
FileInfofi=newFileInfo("temp");
FileStreammyStream=fi.Open(FileMode.Create);
byte[]mydata=((byte[])dr["imgdata"]);
//label2.Text="您现在看到的是:
"+dr["imgtitle"].ToString();
foreach(byteainmydata)
{
myStream.WriteByte(a);
}
myStream.Close();
ImagemyImage=Image.FromFile("temp");
pic1.Image=myImage;
pic1.Refresh();
dr.Close();
}
else
{
MessageBox.Show("没有成功读入数据!
");
}
conn.Close();
}
}
}