一、将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文档