Dim connAs New SqlConnection(ConnStr)
Dim commAs New SqlCommand(sql,conn)
Dim drAs SqlDataReaderTry
conn.Open()
dr=comm.ExecuteReader
DG.DataSource=dr
DG.DataBind()
Catch exAs Exception
If Not dr Is Nothing Then
dr.Close()
End If
If Not conn Is Nothing Then
conn.Close()
End If
End Try
End Sub
EndClass
show.aspx根据传递过来的id的值,读取数据库中的相应记录,将二进制文件按照其MIME类型显示出来。
代码如下:
Imports System.Data
Imports System.Data.SqlClient
PublicClass showInherits System.Web.UI.Page
# Region"Web窗体设计器生成的代码"
"该调用是Web窗体设计器所必需的
<System.Diagnostics.DebuggerStepThrough()>Private Sub InitializeComponent()
End Sub
"注意:以下占位符声明是Web窗体设计器所必需的
"不要删除或移动它
Private designerPlaceholderDeclarationAs System.Object
Private Sub Page Init(ByVal senderAs System.Object,ByVal eAs System.EventArgs)Handles
MyBase.Init
′CODEGEN:此方法调用是Web窗体设计器所必需的
"不要使用代码编辑器修改它
InitializeComponent()
End Sub
# End Region
PrivateConnStr=System.Configuration.ConfigurationSettings.AppSettings("dsn")
Private Sub Page Load(ByVal senderAs System.Object,ByVal eAs System.EventArgs)HandlesMyBase.Load
Dim idAs String=Request.QueryString("id")
Dim connAs New SqlConnection(ConnStr)
Dim sqlAs String="select*from yuanyuan where id="&; id
Dim commAs New SqlCommand(sql,conn)
Dim drAs SqlDataReader
Try
conn.Open()
dr=comm.ExecuteReader()
If dr.Read Then
Dim ftypeAs String=dr("ftype").ToString
Response.ContentType=ftype
Dim temp()AsByte=CType(dr("fcontent"),Byte())
Response.BinaryWrite(temp)
′Dim fnameAs String=dr("fname").ToString
Response.End()
End If
Catch exAs Exception
′"
Finally
If Not dr Is Nothing Then
dr.Close()
End If
If Not conn Is Nothing Then
conn.Close()
End If
End Try
End Sub
EndClass
4.8.4运行
在浏览器中运行程序,上传文件到数据库中。单击“show”链接,可以在页面下方显示文件内容。
右键单击“show”链接,可以下载文件。
重复前面的步骤,上传多个文件到数据库中。
现在,对数据库中yuanyuan表格的fcontent建立全文索引。执行以下SQL语句:
——启用全文支持
use love
Exec sp fulltext database"enable"
——创建全文目录
Exec sp fulltext catalog"loveCatalog","create"
——注册用于全文检索的表
Exec sp fulltext table"yuanyuan","create","loveCatalog","loveyuanyuan"
——指定fcontent列为全文索引列,fext是类型列
Exec sp fulltext column"yuanyuan","fcontent","add",0x0804,"fext"
——激活全文索引
Exec sp fulltext table"yuanyuan","activate"
——执行全文目录的填充
Exec sp fulltext catalog"loveCatalog","start full"
这个时候,可以执行全文搜索了。
打开save.aspx,在搜索框中输入“大禹”,则搜索出所有含“大禹”的文档。
4.9大数据量全文检索的优化
4.9.1优化的思想
对于数据量小的表(通常指不到1000000),实现全文索引几乎不需要进行任何的性能优化。但是,对于超过百万条记录的大型表创建全文索引或填充全文目录的时候,会有大量的读写操作发生,就需要对硬件、操作的时机和实施方案等方面进行更多的考虑,进行优化。
4.9.2优化的思路
如何实施优化?在一个流程中涉及多少组件?这些组件之间有什么联系?搞清楚这些问题就可以实施优化。优化,包括组件内部优化和组件连接优化。
1.组件的作用方式
在主要的组件中,SQL Server企业管理器内的数据库树的一个节点用于管理数据库内的全文目录,SQL-DMO有用于管理全文目录和索引的对象,Transact-SQL有一组用于管理全文目录和索引的系统存储过程。
其他组件以下面的步骤和方式定义和填充全文索引。
①启用用于全文索引的MicrosoftSQL Server TM2000数据库。
②指定数据库的全文目录。
③启用用于全文索引且与目录相关联的个别表。
④每个表中的个别列被添加到表的全文索引中。从第①步到第④步的所有元数据信息都存储在SQL Server数据库内的系统表中。
⑤逐表激活各表的全文索引。当激活全文表索引时,起始种子值将从SQL Server实例发送到Microsoft搜索服务内的索引服务。起始种子值标识全文索引所涉及的表。
⑥基于逐个目录或逐个表来请求填充。基于目录填充使您得以在一个操作中填充多个索引;而填充表则允许填充特定索引。
2.填充的形式
全文目录和表的填充包含如下形式。
(1)完全填充
如果为全文目录请求完全填充,则为该目录所涉及的所有表中的所有行生成索引项。如果为表请求完全填充,则为该表中的所有行生成索引项。完全填充通常发生在当首先填充目录或索引,然后使用更改跟踪或增量填充来维护索引时。
(2)更改跟踪填充
维护在系统表中已修改的行的记录,并将更改传播到全文索引。通过执行sp fulltexttable启动更改跟踪并为@ action参数指定start change tracking。使用更改跟踪时,也指定从历史表取得更改并在全文索引中填充更改的时间。
(3)后台更新索引
用start change tracking启动更改跟踪之后,可以通过为@ action参数指定startbackground updateindex来执行sp fulltext table。使用该选项可以在对表中的行进行更改时,将这些更改传播到全文索引。
(4)按需更新索引
在该选项下,当执行sp fulltext table并为@ action参数指定update index时,将所有跟踪的更改存储到历史中并只将这些更改传播到全文索引。
(5)调度更新索引
可以使用SQL代理程序调度执行sp fulltext table并为@ action参数指定updateindex的周期性作业。这会将所有未完成的跟踪更改传播到索引。