用户登录
用户注册

分享至

数据库保存word文档

  • 作者: x你夏了我的夏天
  • 来源: 51数据库
  • 2020-04-21

一、将word文档保存到数据库中

using System;using 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=test;uid=sa;pwd=test;database=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=test;uid=sa;pwd=test;database=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"); } }}。

二、将word文档保存到数据库中

using System;

using 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=test;uid=sa;pwd=test;database=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=test;uid=sa;pwd=test;database=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");

}

}

}

三、数据库的存储方式

数据库并不是直接存储文件的。

数据库依照某种数据模型组织起来并存放二级存储器中的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改和检索由统一软件进行管理和控制。

数据库你可以想象为一大堆数据表的集合,数据就存放在每个表中 图片,文件等也能存放在数据库的表中,不过需要转换成二进制编码以数据的格式存放,需要取出时再通过程序进行转换成为原来的格式 比如留言板,你看到的内容是存放在数据库的一个记录表中,一条留言就占用一条记录行,需要时通过SELECT 等语句读取出它的内容,显示出来 内容更新了,也通过UPDATE 等语句更新数据库中相应记录行的数据。

四、C# sql数据库中word文档的保存和读取

在Sql Server中存储、读写Word文件,需要将指定表字段添加为Image类型,示例表结构为:1 CREATE TABLE CONTRACTS ( 2 ID VARCHAR (50), 3 CONTRACT_FILE IMAGE 4 ); CONTRACT_FILE字段就是要存储Word文件的字段,在存储前,有一个小插曲,你需要将Word文件转换为byte数组,可参考以下代码实现:1 //将文件转换为byte数组 2 public static byte[] File2Bytes(string fileName) 3 { 4 FileStream fs = new FileStream(fileName,FileMode.OpenOrCreate, FileAccess.Read); 5 byte[] fileDatas = new byte[fs.Length]; 6 fs.Read(fileDatas, 0, System.Convert.ToInt32(fs.Length)); 7 fs.Close(); 8 return fileDatas; 9 } 接下来就是将转换后的byte[]数组存储到SqlServer的对应字段中,具体实现代码可看如下代码段:01 //将文件存储到数据库 02 public bool UpdateContractFile(string id, byte[] fileBytes) 03 { 04 string sql = "UPDATE CONTRACTS SET CONTRACT_FILE=@CONTRACT_FILE WHERE ID=@ID"; 05 using (SqlConnection conn = new SqlConnection(this.m_DataAccess.ConnectString)) 06 { 07 conn.Open(); 08 using (SqlCommand cmd = new SqlCommand()) 09 { 10 cmd.Connection = conn; 11 cmd.CommandText = sql; 12 cmd.Parameters.Clear(); 13 cmd.Parameters.Add(new SqlParameter("@CONTRACT_FILE", SqlDbType.Image)); 14 cmd.Parameters["@CONTRACT_FILE"].Value = fileBytes; 15 cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.VarChar)); 16 cmd.Parameters["@ID"].Value = id; 17 return cmd.ExecuteNonQuery() > 0 ? true : false; 18 } 19 } 20 } 同时,因之前转换了数据类型,所以从数据库中读取Word文件时,要先将Image类型的字段转换为bytes[],代码如下:01 //通过ID获取文件byte数组 02 public byte[] GetContractFile(string id) 03 { 04 string sql = "SELECT CONTRACT_FILE FROM CONTRACTS WHERE ID='{0}'"; 05 sql = string.Format(sql, id); 06 object contractFile; 07 contractFile = this.m_DataAccess.ExecuteScalar(sql); 08 if (contractFile == null) 09 { 10 return new byte[0]; 11 } 12 else 13 { 14 return (byte[])contractFile; 15 } 16 } 在获取到文件的byte[]后,将该文件再通过文件流存储为Word文件,以下代码可实现此功能:01 //将byte[]数组存储为Word文件 02 byte[] fileBytes = this.m_ContractsBusiness.GetContractFile(id); 03 if (fileBytes.Length == 0) 04 { 05 XMessageBox.ShowError("未找到合同文件!"); 06 return; 07 } 08 SaveFileDialog sfd = new SaveFileDialog(); 09 sfd.Filter = "Word文件(*.doc)|*.doc"; 10 if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 11 { 12 try 13 { 14 string saveFileName = sfd.FileName; 15 int arraysize = new int(); 16 arraysize = fileBytes.GetUpperBound(0); 17 FileStream fs = new FileStream(saveFileName, FileMode.OpenOrCreate, FileAccess.Write); 18 fs.Write(fileBytes, 0, arraysize); 19 fs.Close(); 20 if (XMessageBox.ShowQuestion("文件存储成功,是否立即打开文件?") == 21 System.Windows.Forms.DialogResult.Yes) 22 { 23 Process.Start(saveFileName); 24 } 25 } 26 catch (Exception ex) 27 { 28 XMessageBox.ShowError("操作失败!"); 29 } 上面的几段代码只是核心代码,并不是完整的代码段,用时候要看清,自己再修改下。

五、word文件不能保存是什么原因

原因和解决方法: 1。

temp文件夹里文件过多,默认是c:\windows\temp下面,清理一下。 2。

某些杀毒软件会产生这种错误,先卸载了试试。 3。

尼姆达病毒修改了system32里的riched20。dll文件,从另外机器上,或安装光盘上拷个。

4。公式编辑器里的某个公式坏了,向上逐个删除法。

5。Ctrl+A Ctrl+C 关闭Word程序 退出Word后这些文本仍可用于其他程序 重新打开Word程序 按Ctrl+V 在使用word编辑文件时,尤其是用公式编辑器输入公式时,当要保存时,Word会弹出一个对话框说是磁盘空间已满,无法保存文件,可实际上磁盘上空间还很大,这是非常令人恼火的一件事情,下面的方法可能会帮助你。

这个方法是笨了点,不过肯定好用,我经常这么做了^_^)。 通常导致这个问题的原因是输入的公式,尤其最近输入公式,可以肯定的最近输入公式中的某一个或某几个: (1)首先将最近输入的片断剪切下来,并复制到一个新的文档中,然后再保存你的文件,如果还是不能保存,则继续剪切次近输入的文字,直到能保存为止; (2) 将新文档中的文字一小段一小段的向回COPY,并不断保存,这样你就能找出导致问题的地方,然后将其删除,重新输入有问题的地方就可以了,通常只是一个公式,这可以节省不少时间。

另外下面还有一个方法,也不错: 在【资源管理器】中右击安装有Windows系统的磁盘,在出现的快捷菜单中单击【属性】,将出现【属性】对话框,从【常规】选项卡中选择【磁盘清理】按钮,此时将出现如图11.2所示的【磁盘清理】对话框。 执行磁盘清理完毕以后,Windows会弹出一个新的对话框。

在【要删除的文件】框中选中【临时文件】选项,然后选择【确定】。Windows将删除临时文件。

要人工删除临时文件,进入临时文件夹,删除任何旧的临时文件(临时文件以波浪号开始,以.tmp扩展名结束)。 返回Word,再次试着保存文件。

如果此时还不能正确保存文档,可以采取以下的方法,步骤如下: (l)按Ctrl+A选定整个文档。 (2)按Ctrl+C将整个文档复制到内存中。

(3)关闭Word程序。此时系统会提示:"您将大量文本放在了'剪贴板'中,是否希望在退出Word后这些文本仍可用于其他程序?"。

(4)选择【是】按钮。 (5)重新打开Word程序。

(6)按Ctrl+V,将复制下来的文本粘贴到新文件中。 (7)命名并保存新的文件。

注意:在删除临时文件时,可能会出现一个对话框,提示不能删除正在使用的文件。这是因为Windows运行的时候,需要不断地用到一些临时文件。

因而,在人工删除临时文件时,试着在开始时只删除几个文件,然后对桌面上的回收站进行清空。否则可能无法删除所有选择的文件。

转载请注明出处51数据库 » 数据库保存word文档

软件
前端设计
程序设计
Java相关