
但是,由于此类文件较大,数据读取和写入都将非常缓慢,所以不提倡这样.
建议使用图片和文档的路径保存在数据库中.
将文件保存到数据库中,实际上是将文件转换成二进制流后,将二进制流保存到数据库相应的字段中。在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=cncm.CommandType=CommandType.Textif(cn.State==0) cn.Open()cm.CommandText="insert into "+tableName+"("+fieldName+") values(@file)"SqlParameter spFile=new SqlParameter("@file",SqlDbType.Image)spFile.Value=bytescm.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()using Systemusing System.Collections.Generic
using System.Text
using System.Data
using System.Data.SqlClient
using System.IO
namespace ConsoleApplication2
{
class Program
{
//把文件写入数据库
public void add(string pathName)
{
FileStream fs = new FileStream(pathName, FileMode.Open, FileAccess.Read)
byte[] buffByte = new byte[fs.Length]
fs.Read(buffByte, 0, (int)fs.Length)
fs.Close()
fs = null
SqlConnection conn = new SqlConnection(@"data source=testuid=sapwd=testdatabase=test")
string sqlstr = @"Insert into table1(doc) values(@img)"
SqlCommand cmd = new SqlCommand()
cmd.CommandType = CommandType.Text
cmd.CommandText = sqlstr
cmd.Connection = conn
cmd.Parameters.Add("@img", System.Data.SqlDbType.Image)
cmd.Parameters[0].Value = buffByte
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
buffByte = null
}
//从数据库读出文件
public void save(string fileName)
{
SqlConnection conn = new SqlConnection(@"data source=testuid=sapwd=testdatabase=test")
conn.Open()
SqlCommand cmd = new SqlCommand("select top 1 doc from table1", conn)
SqlDataReader reader = cmd.ExecuteReader()
byte[] buffByte = null
if (reader.Read())
{
buffByte = (byte[])reader[0]
}
reader.Close()
conn.Close()
FileStream fs
FileInfo fi = new FileInfo(fileName)
fs = fi.OpenWrite()
fs.Write(buffByte, 0, buffByte.Length)
fs.Close()
}
static void Main(string[] args)
{
Program p = new Program()
p.add(@"C:\test.doc")
p.save(@"C:\test1.doc")
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)