zoukankan      html  css  js  c++  java
  • C# 文件保存到数据库中或者从数据库中读取文件

    首先,介绍一下保存文件到数据库中。
    将文件保存到数据库中,实际上是将文件转换成二进制流后,将二进制流保存到数据库相应的字段中。在SQL Server中该字段的数据类型是Image,在Access中该字段的数据类型是OLE对象。

    //保存文件到SQL Server数据库中
    FileInfo fi=new FileInfo(fileName);
    FileStream fs=fi.OpenRead();
    byte[] bytes=new byte[fs.Length];
    fs.Read(bytes,0,Convert.ToInt32(fs.Length));
    SqlCommand cm=new SqlCommand();
    cm.Connection=cn;
    cm.CommandType=CommandType.Text;
    if(cn.State==0) cn.Open();
    cm.CommandText="insert into "+tableName+"("+fieldName+") values(@file)";
    SqlParameter spFile=new SqlParameter("@file",SqlDbType.Image);
    spFile.Value=bytes;
    cm.Parameters.Add(spFile);
    cm.ExecuteNonQuery()
    //保存文件到Access数据库中
    FileInfo fi=new FileInfo(fileName);
    FileStream fs=fi.OpenRead();
    byte[] bytes=new byte[fs.Length];
    fs.Read(bytes,0,Convert.ToInt32(fs.Length));
    OleDbCommand cm=new OleDbCommand();
    cm.Connection=cn;
    cm.CommandType=CommandType.Text;
    if(cn.State==0) cn.Open();
    cm.CommandText="insert into "+tableName+"("+fieldName+") values(@file)";
    OleDbParameter spFile=new OleDbParameter("@file",OleDbType.Binary);
    spFile.Value=bytes;
    cm.Parameters.Add(spFile);
    cm.ExecuteNonQuery()
    //保存客户端文件到数据库
    sql="update t_mail set attachfilename=@attachfilename,attachfile=@attachfile where mailid="+mailid;
    myCommand = new SqlCommand(sql, new SqlConnection(ConnStr));
    string path = fl_name.PostedFile.FileName;
    string filename=path.Substring(path.LastIndexOf("\\")+1,path.Length-path.LastIndexOf("\\")-1);
    myCommand.Parameters.Add("@attachfilename",SqlDbType.VarChar);
    myCommand.Parameters["@attachfilename"].Value=filename;
    myCommand.Parameters.Add("@attachfile",SqlDbType.Image);
    Stream fileStream = fl_name.PostedFile.InputStream;
    int intFileSize = fl_name.PostedFile.ContentLength;
    byte[] fileContent = new byte[intFileSize];
    int intStatus = fileStream.Read(fileContent,0,intFileSize); //文件读取到fileContent数组中
    myCommand.Parameters["@attachfile"].Value=((byte[])fileContent);
    fileStream.Close();
    myCommand.Connection.Open();
    myCommand.ExecuteNonQuery();
    myCommand.Connection.Close();

    代码中的fileName是文件的完整名称,tableName是要操作的表名称,fieldName是要保存文件的字段名称。
    两段代码实际上是一样的,只是操作的数据库不同,使用的对象不同而已。
    接着,在说说将文件从数据库中读取出来,只介绍从SQL Server中读取。

    SqlDataReader dr=null;
    SqlConnection objCn=new SqlConnection();
    objCn.ConnectionString="Data Source=(local);User ID=sa;Password=;Initial Catalog=Test";
    SqlCommand cm=new SqlCommand();
    cm.Connection=cn;
    cm.CommandType=CommandType.Text;
    cm.CommandText="select "+fieldName+" from "+tableName+" where ID=1";
    dr=cm.ExecuteReader();
    byte[] File=null;
    if(dr.Read())
    {
    File=(byte[])dr[0];
    }
    FileStream fs;
    FileInfo fi=new System.IO.FileInfo(fileName);
    fs=fi.OpenWrite();
    fs.Write(File,0,File.Length);
    fs.Close();

    上面的代码是将保存在数据库中的文件读取出来并保存文fileName指定的文件中。
    在使用上面的代码时,别忘了添加System.Data.SqlClient和System.IO引用。
    修改:
    将读文件的下面部分的代码

    FileStream fs;
    FileInfo fi=new System.IO.FileInfo(fileName);
    fs=fi.OpenWrite();
    fs.Write(File,0,File.Length);
    fs.Close();
    修改为
    FileStream fs=new FileStream(fileName,FileMode.CreateNew);
    BinaryWriter bw=new BinaryWriter(fs);
    bw.Write(File,0,File.Length);
    bw.Close();
    fs.Close(); 
  • 相关阅读:
    跳出IFrame几种方式
    EChart使用简单介绍
    ckplayer视频播放插件使用
    uploadify文件批量上传
    纵表与横表互转实例(转)
    Sublime Text3使用记录
    异步上传,显示进度条
    JS手机浏览器判断(转)
    命令行创建maven模块工程
    eclipse创建maven模块工程
  • 原文地址:https://www.cnblogs.com/colder/p/2579047.html
Copyright © 2011-2022 走看看