日期:2013-05-09  浏览次数:20460 次

数据的持久化是开发的基础性任务,我们不可避免要将各种的类型文件持久化,关于文件(或是大对象)的存储,我在我的blog http://www.cnblogs.com/supercode/articles/156744.html谈过
今天我们从设计的角度来实现这功用,从本文中您将了解道以下内容
l         SQL Server中的数据类型
l         数据表,存储过程的设计
l         逻辑层实现各品种型文件的自动转化
l         DataGrid中的自定义文件列表显示方式,以及从服务端将文件发送客户端时的一些技巧
 1. Sql server中的数据类型
 
Unicode 字符串
nchar
固定长度的 Unicode 数据,最大长度为 4,000 个字符。 
nvarchar
可变长度 Unicode 数据,其最大长度为 4,000 字符。sysname 是系统提供用户定义的数据类型,在功用上等同于 nvarchar(128),用于援用数据库对象名。
ntext
可变长度 Unicode 数据,其最大长度为 2^30 - 1 (1,073,741,823) 个字符。
二进制字符串
binary
固定长度的二进制数据,其最大长度为 8,000 个字节。
varbinary
可变长度的二进制数据,其最大长度为 8,000 个字节。
image
可变长度的二进制数据,其最大长度为 2^31 - 1 (2,147,483,647) 个字节。 
 
要想愈加详细的数据类型请查阅Sql Server自带的协助文件,之所以把这几个罗列出来是由于,网上很多朋友经常问到底用binary还是用image作为存储的数据类型,很显然,应该用image,由于很少有文件小于8K的,除非是网络图像(jpeg,gif,png)
 
2. 数据表,存储过程的设计
 (1)创建表
下面是创建表的Sql
if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[FileLib]’) and OBJECTPROPERTY(id, N’IsUserTable’) = 1)
drop table [dbo].[FileLib]
GO
 
CREATE TABLE [dbo].[FileLib] (
       [ID] [int] IDENTITY (1, 1) NOT NULL ,
       [FName] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
       [FileType] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
       [FileContent] [image] NULL ,
       [FileSize] [float] NULL ,
       [FileUploader] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
       [UploadDate] [datetime] NULL ,
       [Icon] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
 
关系图如下


           

     图1存储文件的表
(2)创建存储过程
1.         写入数据库的存储过程
/**//************************************************************
*  Purpose: Test For UpLoad File To Sql Server                                                       *
*  Author:    登峰                                                                                               &nbs