关于开发的几点说明:
//本实例采用三层架构的模式开发
第一步:首先在数据库中创建一张表,用来存储数据,对于存储图片内容的字段使用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();
}
}