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

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值