`
piperzero
  • 浏览: 3479504 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Asp.net将图片以二进制数据存进数据库全过程

 
阅读更多

关于开发的几点说明:

//本实例采用三层架构的模式开发

第一步:首先在数据库中创建一张表,用来存储数据,对于存储图片内容的字段使用VarBinary类型

数据库字段值:int imageID;

VarBinary imageName;

表名称:ImageTable

第二步:创建一个工程,按三层架构的模式,分别有实体类(ImageInfo)、数据库类(DAL)和业务层类(BLL)

ImageInfo类代码如下:

public class ImageInfo{

public int imageID{get;set;}

public byte[] imageName{get;set;}

}

DAL类代码如下:使用数据库保存数据的话就需要用到数据库的通用类(SqlDbHelper)

public class SqlDbHelper{

//创建用于连接数据库的变量

private string connstr;

public SqlDbHelper(){}

public SqlDbHelper(stirng connstr){

this.connstr=connstr;

}

//设置数据库连接字符串

public string ConnectionString{

set{connstr=value;}

}

//执行一个查询并返回结果集

public DataTable ExecuteDataTable(string sql){

//实例化一个DataTable,用于装载查询的结果集

DataTable data=new DataTable();

using (SqlConnection connection=new SqlConnection(connstr)){

using (SqlCommand command=new SqlCommand(sql,connection)){

SqlDataAdapter adapter=new SqlDataAdapter(command);

adapter.fill(data);

}

}

return data;

}

public DataTable ExecuteDataTable(string sql,CommandType commandType){

return ExecuteDataTable(sql,commandType,null);

}

public DataTable ExecuteDataTable(string sql,CommandType commandType,SqlParameter[] parameters){

DataTable data=new DataTable();

using (SqlConnection connection=new SqlConnection(connstr)){

using (SqlCommand command=new SqlCommand (sql,command)){

command.CommandType=commandType;

if(parameters!=null){

foreach(SqlParameter parameter in parameters){

command.Parameters.Add(parameter);

}

}

SqlDataAdapter adapter=new SqlDataAdapter (command)

adapter.Fill(data);

}

return data;

}

public SqlDataReader ExecuteReader(string sql){

return ExecuteReader(sql,CommandType.Text,null);

}

public SqlDataReader ExecuteReader(string sql,CommandType commandType){

return ExecuteReader(sql,commandType,null);

}

public SqlDataReader ExecuteReader(string sql,CommandType commandType,SqlParameter[] parameters){

SqlConnection connection=newSqlConnection(connstr);

SqlCommand command=new SqlCommand (sql,connection);

if(parameters!=null){

foreach(SqlParameter parameter in parameters){

command.parameters.Add(parameter);

}

}

connection.Open();

return command.ExecuteReader(CommandBehavior.CloseConnection);

}

public object ExecuteScalar(string sql){

return ExecuteScalar(sql,CommandType.Text,null);

}

public object ExecuteScalar(string sql,CommandType commandType){

return ExecuteScalar(sql,commandType,null);

}

public object ExecuteScalar(string sql,CommandType commandType,SqlParameter[] parameters){

object result=null;

using (SqlConnection connection=new SqlConnection (connstr)){

using (SqlCommand command=newSqlCommand (sql,connection)){

command.CommandType =commandType;

if(parameters!=null){

foreach(SqlParameter parameter in parameters){

command.parameters.Add(parameter);

}

}

try{

connection.Open();

result=command.ExecuteScalar();

}

finally{

connection.Close();

}

}

}

return result;

}

//对数据进行增删改操作

public int ExecuteNonQuery(string sql){

return ExecuteNonQuery(sql,CommandType.Text,null);

}

public int ExecuteNonQuery(string sql,CommandType commandType){

return ExecuteNonQuery(sql,commandType,null);

}

public int ExecuteNonQuery(string sql,CommandType commandType,SqlParameter[] parameters){

int count=0;

using (SqlConnection connection=new SqlConnection (connstr)){

using (SqlCommand command=newSqlCommand (sql,connection)){

command.CommandType =commandType;

if(parameters!=null){

foreach(SqlParameter parameter in parameters){

command.parameters.Add(parameter);

}

}

try{

connection.Open();

result=command.ExecuteNonQuery();

}

finally{

connection.Close();

}

}

}

return count;

}

public DataTable GetTables(){

DataTable data=null;

using (SqlConnection connection=new SqlConnection (connstr)){

connection.Open();

data=connection.GetSchena("Tables");

}

return data;

}

public class DAL{

//创建连接数据库的字符串

public string connstr;

public DAL(){

//链接数据库,在web.config文件中进行如下配置

<appSettings>

<add key="DATABASE_NAME" value="此处填写自己的数据库配置">

</appSettings>

connstr=ConfigurationManger.AppSetting["DATABASE_NAME"];

}

//向数据库中添加图片

public bool AddImage(ImageInfo info){

//将imageID设置成主键,让其自动增长

string sql="insert into ImageTable(imageName) values(@imageName)";

SqlParameter [] parameters=new SqlParameter[1];

parameters[0]=new SqlParameter("imageName",SqlDbType.VarBinary);

parameters[0].Value=info.imageName;

return new SqlDbHelper(connstr).ExecuteNonQuery(sql,CommandType.Text,parameters)>0;

}

//删除图片

public bool DeleteImage(int imageID){

string sql="delete from ImageTable where imageId="+imageID;

return new SqlDbHelper(connstr).ExecuteNonQuery(sql)>0;

}

//根据图片名称查询

public DataTable GetImageName(string imageName){

string sql="select * from ImageTable where imageName=@imageName";

SqlParameter parameters=new SqlParameter[1];

parameters[0]=new SqlParameter("imageName",SqlDbType.VarBinary);

parameters[0].Value=imageName;

return SqlDbHelper(connstr).ExecuteDataTable(sql,CommandType.Text,parameters);

}

//根据id查询图片

public SqlDataReader GetImageToShow(int imageID){

string sql="select imageName from ImageTable where imageID=@imageID";

SqlParameter [] parameters=new SqlParameter[1];

parameters[0]=new SqlParameter("imageID",SqlDbType.Int);

parameters[0].Value=imageID;

}

BLL类代码如下:

public class BLL{

//添加图片

public static bool AddImageTo(ImageInfo info){

DAL dal=new DAL();

DataTable data=dal.GetImageName(info.imageName);

if(data.Rows.Count>0){

return false;

}else{

return new DAL().AddImage(info);

}

}

//查询图片

public static SqlDataReader SelectImage(int imageID){

return new DAL().GetImageToShow(imageID);

}

//删除图片

public static bool DeleteImage(int imageID){

return new DAL().DeleteImage(imageID);

}

}

//新建一个页面用于显示图片

protected void btnSubmit(object sender,EventArgs e){

//上传图片使用的是fileUploadImage控件

if(fileUploadImage.HasFile){

string image=System.IO.Path.GetExtension(fileUploadImage.FileName);

//对上传文件的格式进行判断

if(image==".jpg"|| image==".gif"){

string filename=fileUploadImage.PostedFile.FileName;

FileStream fs=new FileStream(filename,FileMode.Open);

BinaryReader br-=new BinaryReader(fs);

byte[] imagebuffer=new byte[br.BaseStream.Length];

br.Read(imagebuffer,0convert.ToInt32(br.BaseStream.Length));

string imageName=System.Convert.ToBase64String(imagebuffer);

//将上传的文件保存在Image文件夹下

fileUploadImage.SaveAs(Server.MapPath("/Image")+"\\"+(fileUploadImage.FileName));

fs.Colse();

br.Close();

ImageInfo info=new ImageInfo();

info.imageName=imagebuffer;

if(BLL.AddImge(info)){

//根据自己需要,可将全部信息显示出来,用GridView控件显示全部信息,将读取图片信息的方法写在另外一个空页面中,方便操作,在GridView控件中绑定一个Image控件

}

}

}

protected void gvAllIage_RowDataBound(object sender,GridViewRowEventArgs e){

if(e.Row.RowType==DataControlRowType.DataRow){

Image image=e.Row.FindControl("images" ) as Iamge;

//跳转到另外一个页面显示图片

image.ImageURL="ShowImage.aspx>imageID="+image.AlternateText.ToString();

}

}

}

//从数据库中查出图片并显示

protected void Page_Load(object sender,EventArgs e){

if(Request.QueryString["imageID"]!=null){

int imageID=Convert.ToInt32Request.QueryString["imageID"];

SqlDataReader reader=BLL.SelectImage(imageID);

if(reader.Read()){

byte[] img=(byte[])reader["imageName"]

Response.BinaryWrite(img);

}

reader.Close();

}

}

分享到:
评论

相关推荐

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    亮剑.NET深入体验与实战精要2

    9.2.7 读写二进制文件 372 9.2.8 文件复制、移动、删除 374 9.3 文件夹目录操作 375 9.4 读写INI文件 376 9.5 读写注册表 379 本章常见技术面试题 381 常见面试技巧之经典问题巧回答 381 本章小结 382 第10章 网络...

    亮剑.NET深入体验与实战精要3

    9.2.7 读写二进制文件 372 9.2.8 文件复制、移动、删除 374 9.3 文件夹目录操作 375 9.4 读写INI文件 376 9.5 读写注册表 379 本章常见技术面试题 381 常见面试技巧之经典问题巧回答 381 本章小结 382 第10章 网络...

    C#编程经验技巧宝典

    98 &lt;br&gt;0153 如何自定义数字小数点左边分组位数 98 &lt;br&gt;0154 格式化输入数据为货币格式 99 &lt;br&gt;0155 如何计算两个整数的乘积 99 &lt;br&gt;0156 如何将二进制数转换为十进制数 100 &lt;br&gt;0157 如何...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。 - 更多特点 PHP的...

    vc++ 开发实例源码包

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

Global site tag (gtag.js) - Google Analytics