步骤 1:为联合搜索 SQL Server 连接器创建项目
备注
本主题介绍 Infrastructure Update for Microsoft Office Servers包含的功能。若要下载此更新,请参阅 2008 年 7 月 15 日版 SharePoint Server 2007 基础结构更新说明。
在使用此示例之前,您需要为联合搜索 SQL Server 连接器创建使用 ASPX 页的网站项目。
您可以从联合搜索 SQL Server 连接器示例发布版下载此示例的完整代码。此发布版位于 MSDN 代码库的 Microsoft Office SharePoint Server 2007 SDK 搜索示例资源页上。
创建网站项目
在 Visual Studio 2008 中,在“文件”菜单上,指向“新建”,然后单击“网站”。
在“Visual Studio 已安装的模板”中,单击“ASP.NET 网站”。
在“位置”中,单击“文件系统”,如有必要,单击“浏览”以查找此网站的正确位置。此位置既可以是您的 Visual Studio 项目和网站的标准位置,也可以是网站的虚拟目录下用来部署此 Web 应用程序的位置。
在“语言”中,单击“Visual C#”,然后单击“确定”。
创建 ASPX 页
在“解决方案资源管理器”中,右键单击“Default.aspx”,然后单击“删除”,以删除该项目创建的默认 ASPX 页。
在“网站”菜单上,单击“添加新项”。
在“添加新项”对话框中,单击“Web 窗体”,然后键入 searchresellers.aspx。
选中“将代码放在单独的文件中”,然后单击“添加”。
在“解决方案资源管理器”中,双击“searchresellers.aspx.cs”。
在 searchresellers.aspx.cs 中,将下面的 using 语句添加到代码顶部附近的命名空间指令中。
using System.Text; using System.Data.SqlClient;
将以下代码添加到类声明下方。
string query; string vendor; string format; string connectionString = "Data Source=(local);Integrated Security=SSPI;Initial Catalog=AdventureWorksDW;";
使用以下代码重写 Render 方法。
protected override void Render(HtmlTextWriter writer) { query = Request.QueryString["q"]; vendor = Request.QueryString["v"]; format = Request.QueryString["f"]; if (vendor != null && vendor.Length > 0) { writer.Write(GetVendorHTML(vendor)); } else { if (format == "htm") { writer.Write(GetResultsHTML(query)); } else { StringBuilder sb = new StringBuilder(); Response.ContentType = "text/xml"; writer.Write(GetResultsXML(query)); } } }
添加 GetResultsXML 方法的代码。此方法使用查询词对 AdventureWorksDW 数据库执行 SELECT 语句,然后将结果转换为 RSS 格式。
private string GetResultsXML(string queryTerm) { using (SqlConnection connect = new SqlConnection(connectionString)) { connect.Open(); string strCommand = string.Format("select ResellerName,BusinessType,ProductLine,AnnualRevenue from DimReseller WHERE ResellerName like '%{0}%'", queryTerm); SqlCommand command = new SqlCommand(strCommand, connect); SqlDataReader sqlReader = command.ExecuteReader(); StringBuilder resultsXML = new StringBuilder(); resultsXML.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); resultsXML.Append("<rss version=\"2.0\">"); resultsXML.AppendFormat("<channel><title><![CDATA[Adventure Works: {0}]]></title><link/><description/><ttl>60</ttl>", queryTerm); while (sqlReader.Read()) { resultsXML.AppendFormat("<item><title><![CDATA[{0}]]></title><link><![CDATA[{4}?v={0}&q={5}]]></link><description><![CDATA[{1} {2} {3}]]></description></item>", sqlReader[0], sqlReader[1], sqlReader[2], sqlReader[3], Request.Path.ToString(), query); } resultsXML.Append("</channel></rss>"); return resultsXML.ToString(); } }
添加 GetResultsHTML 方法的代码。此方法使用查询词对 AdventureWorksDW 数据库执行 SELECT 语句,然后以 HTML 格式显示结果。
private string GetResultsHTML(string queryTerm) { StringBuilder resultsHTML = new StringBuilder(); resultsHTML.Append("<html><head><title>More Results HTML Page</title></head><body>"); using (SqlConnection connect = new SqlConnection(connectionString)) { connect.Open(); string strCommand = string.Format("select ResellerName,BusinessType,ProductLine,AnnualRevenue from DimReseller WHERE ResellerName LIKE '%{0}%'", query); SqlCommand command = new SqlCommand(strCommand, connect); SqlDataReader sqlReader = command.ExecuteReader(); if (sqlReader.HasRows) { int i = 0; while (sqlReader.Read()) { if (i > 14) { break; } else { resultsHTML.AppendFormat("<p><a href='{4}?v={0}'>{0}</a><br>{1} {2} {3}</p>", sqlReader[0], sqlReader[1], sqlReader[2], sqlReader[3], Request.Path.ToString()); i++; } } } else { resultsHTML.AppendFormat("<p>No results for query: <b>{0}</b>", query); } if (!sqlReader.IsClosed) { sqlReader.Close(); } } resultsHTML.Append("</body></html>"); return resultsHTML.ToString(); }