开发者社区> 橘子红了呐> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

[转] C#实现在Sql Server中存储和读取Word文件 (Not Correct Modified)

简介:
+关注继续查看

出处 C#实现在Sql Server中存储和读取Word文件

 

要实现在Sql Server中实现将文件读写Word文件,需要在要存取的表中添加Image类型的列,示例表结构为:

1
2
3
4
CREATE TABLE CONTRACTS ( 
    ID VARCHAR (50), 
    CONTRACT_FILE IMAGE 
); 

 

要将Word文件存储到数据库的CONTRACT_FILE字段中,需要将文件转换为byte数组,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/// 将文件转换为byte数组 
/// <summary> 
/// 将文件转换为Bytes 
/// </summary> 
/// <param name="fileName"></param> 
/// <returns></returns> 
public static byte[] File2Bytes(string fileName) 
    FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read); 
    byte[] fileDatas = new byte[fs.Length]; 
    fs.Read(fileDatas, 0, System.Convert.ToInt32(fs.Length)); 
    fs.Close(); 
    return fileDatas; 
}

 
然后将转换完成的byte[]存储到数据库的对应字段:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/// 将文件存储到数据库 
/// <summary> 
/// 更新合同文件 
/// </summary> 
/// <param name="id"></param> 
/// <param name="fileBytes"></param> 
/// <returns></returns> 
public bool UpdateContractFile(string id, byte[] fileBytes) 
    string sql = "UPDATE CONTRACTS SET CONTRACT_FILE=@CONTRACT_FILE WHERE ID=@ID"
    using (SqlConnection conn = new SqlConnection(this.m_DataAccess.ConnectString)) 
    
        conn.Open(); 
        using (SqlCommand cmd = new SqlCommand()) 
        
      cmd.Connection = conn; 
      cmd.CommandText = sql; 
      cmd.Parameters.Clear(); 
       
      cmd.Parameters.Add(new SqlParameter("@CONTRACT_FILE", SqlDbType.Image)); 
      cmd.Parameters["@CONTRACT_FILE"].Value = fileBytes; 
       
      cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.VarChar)); 
      cmd.Parameters["@ID"].Value = id; 
       
      return cmd.ExecuteNonQuery() > 0 ? true false
        
    
}

 

 

 

 

要读取数据库中存储的Word文件,需要先将Image类型的字段转换为bytes[],具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// 通过ID获取文件byte数组 
/// <summary> 
/// 获取合同文件 
/// </summary> 
/// <param name="id"></param> 
/// <returns></returns> 
public byte[] GetContractFile(string id) 
    string sql = "SELECT CONTRACT_FILE FROM CONTRACTS WHERE ID='{0}'"
    sql = string.Format(sql, id); 
    object contractFile; 
    contractFile = this.m_DataAccess.ExecuteScalar(sql); 
    if (contractFile == null
    
return new byte[0]; 
    
    else 
    
return (byte[])contractFile; 
    
}

 


在获取到文件的byte[]后,将该文件通过文件流操作存储为Word文件,具体代码如下:

将byte[]数组存储为Word文件

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
byte[] fileBytes = this.m_ContractsBusiness.GetContractFile(id); 
if (fileBytes.Length == 0) 
    XMessageBox.ShowError("未找到合同文件!"); 
    return
SaveFileDialog sfd = new SaveFileDialog(); 
sfd.Filter = "Word文件(*.doc)|*.doc"
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
    try 
    
        string saveFileName = sfd.FileName; 
        int arraysize = new int();//注意这句话 
        arraysize = fileBytes.GetUpperBound(0); 
        FileStream fs = new FileStream(saveFileName, FileMode.OpenOrCreate, FileAccess.Write); 
        fs.Write(fileBytes, 0, arraysize); 
        fs.Close(); 
        if (XMessageBox.ShowQuestion("文件下载成功,是否立即打开文件?") == 
            System.Windows.Forms.DialogResult.Yes) 
        
            Process.Start(saveFileName); 
        
    
    catch (Exception ex) 
    
        XMessageBox.ShowError("下载文件失败!"); 
    }

 

 

 

 

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。




出处 C#实现在Sql Server中存储和读取Word文件

 

要实现在Sql Server中实现将文件读写Word文件,需要在要存取的表中添加Image类型的列,示例表结构为:

1
2
3
4
CREATE TABLE CONTRACTS ( 
    ID VARCHAR (50), 
    CONTRACT_FILE IMAGE 
); 

 

要将Word文件存储到数据库的CONTRACT_FILE字段中,需要将文件转换为byte数组,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/// 将文件转换为byte数组 
/// <summary> 
/// 将文件转换为Bytes 
/// </summary> 
/// <param name="fileName"></param> 
/// <returns></returns> 
public static byte[] File2Bytes(string fileName) 
    FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read); 
    byte[] fileDatas = new byte[fs.Length]; 
    fs.Read(fileDatas, 0, System.Convert.ToInt32(fs.Length)); 
    fs.Close(); 
    return fileDatas; 
}

 
然后将转换完成的byte[]存储到数据库的对应字段:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/// 将文件存储到数据库 
/// <summary> 
/// 更新合同文件 
/// </summary> 
/// <param name="id"></param> 
/// <param name="fileBytes"></param> 
/// <returns></returns> 
public bool UpdateContractFile(string id, byte[] fileBytes) 
    string sql = "UPDATE CONTRACTS SET CONTRACT_FILE=@CONTRACT_FILE WHERE ID=@ID"
    using (SqlConnection conn = new SqlConnection(this.m_DataAccess.ConnectString)) 
    
        conn.Open(); 
        using (SqlCommand cmd = new SqlCommand()) 
        
      cmd.Connection = conn; 
      cmd.CommandText = sql; 
      cmd.Parameters.Clear(); 
       
      cmd.Parameters.Add(new SqlParameter("@CONTRACT_FILE", SqlDbType.Image)); 
      cmd.Parameters["@CONTRACT_FILE"].Value = fileBytes; 
       
      cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.VarChar)); 
      cmd.Parameters["@ID"].Value = id; 
       
      return cmd.ExecuteNonQuery() > 0 ? true false
        
    
}

 

 

 

 

要读取数据库中存储的Word文件,需要先将Image类型的字段转换为bytes[],具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// 通过ID获取文件byte数组 
/// <summary> 
/// 获取合同文件 
/// </summary> 
/// <param name="id"></param> 
/// <returns></returns> 
public byte[] GetContractFile(string id) 
    string sql = "SELECT CONTRACT_FILE FROM CONTRACTS WHERE ID='{0}'"
    sql = string.Format(sql, id); 
    object contractFile; 
    contractFile = this.m_DataAccess.ExecuteScalar(sql); 
    if (contractFile == null
    
return new byte[0]; 
    
    else 
    
return (byte[])contractFile; 
    
}

 


在获取到文件的byte[]后,将该文件通过文件流操作存储为Word文件,具体代码如下:

将byte[]数组存储为Word文件

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
byte[] fileBytes = this.m_ContractsBusiness.GetContractFile(id); 
if (fileBytes.Length == 0) 
    XMessageBox.ShowError("未找到合同文件!"); 
    return
SaveFileDialog sfd = new SaveFileDialog(); 
sfd.Filter = "Word文件(*.doc)|*.doc"
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
    try 
    
        string saveFileName = sfd.FileName; 
        int arraysize = new int();//注意这句话 
        arraysize = fileBytes.GetUpperBound(0); 
        FileStream fs = new FileStream(saveFileName, FileMode.OpenOrCreate, FileAccess.Write); 
        fs.Write(fileBytes, 0, arraysize); 
        fs.Close(); 
        if (XMessageBox.ShowQuestion("文件下载成功,是否立即打开文件?") == 
            System.Windows.Forms.DialogResult.Yes) 
        
            Process.Start(saveFileName); 
        
    
    catch (Exception ex) 
    
        XMessageBox.ShowError("下载文件失败!"); 
    }

 

 

 

 

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。




    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5699763.html,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
为什么你SQL Server的数据库文件的Date modified没有变化呢?
原文:为什么你SQL Server的数据库文件的Date modified没有变化呢? 在SQL Server数据库中,数据文件与事务日志文件的修改日期(Date Modified)是会变化的,但是有时候你会发现你的数据文件或日志文件的修改日期(Date Modified)几个月甚至是半年以上都没有变化了,如下截图所示:     为什么呢?不会是什么bug吧? 相信很多人都会有这样的反应。
726 0
SQL Server中如何识别、查找未使用的索引(unused indexes)
原文:SQL Server中如何识别、查找未使用的索引(unused indexes)   在SQL Server中,索引是优化SQL性能的一大法宝。但是由于各种原因,索引会被当做“银弹”滥用,一方面有些开发人员(甚至是部分数据库管理员)有一些陋习,不管三七二十一,总是根据所谓的"感觉"或“经验”先增加一些索引,而不管这些索引是否未被使用或是否合理。
944 0
.SQL Server中 image类型数据的比较
原文:.SQL Server中 image类型数据的比较 在SQL Server中如果你对text、ntext或者image数据类型的数据进行比较。将会提示:不能比较或排序 text、ntext 和 image 数据类型,除非使用 IS NULL 或 LIKE 运算符。
980 0
SQL Server中的Image数据类型的操作
原文:SQL Server中的Image数据类型的操作 准备工作,在库Im_Test中建立一张表Im_Info,此表中有两个字段,分别为Pr_Id (INT),Pr_Info (IMAGE),用来存储图形编号及图形信息。
632 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
SQL Server 2017
立即下载
Spark SQL:Past Present &Future
立即下载
SQL Sever迁移PG经验
立即下载