如何將數據導入到 SQL Server Compact Edition 數據庫中(五)

系列文章導航:
如何將數據導入到 SQL Server Compact Edition 數據庫中(一)
如何將數據導入到 SQL Server Compact Edition 數據庫中(二)
如何將數據導入到 SQL Server Compact Edition 數據庫中(三)
如何將數據導入到 SQL Server Compact Edition 數據庫中(四)

摘要:在本系列文章中,我已經嘗試在 Windows 桌面平臺和 Windows Mobile 平臺上將數據導入到 SQL Server Compact Edition 數據庫中。不過,之前的示例程序都屬於 Windows 應用程序。本文將介紹如何在 ASP.NET Web 應用程序中實現 SQL Server Compact Edition 數據庫的生成和數據導入。

一、創建 ASP.NET 版的數據導入程序

1.使用 Visual Studio 2005 新建一個 Visual C# 版本的“ASP.NET Web 應用程序”項目,項目名稱爲“CopyTableASPNET”。

2.爲新建的“CopyTableASPNET”項目添加對 System.Data.SqlServerCe.dll 程序集的引用,注意版本號是 9.0.242.0。這裏特別聲明版本號是考慮到大家可能安裝了 Visual Studio 2008,它自帶了最新的 SQL Server Compact 3.5,版本號是 3.5.0.0,可能也會出現在添加引用對話框中。而本文的示例是針對 SQL Server 2005 Compact Edition (v3.1) 編寫的,程序集版本號爲 9.0.242.0。



3.在“解決方案資源管理器”打開 Default.aspx 頁面,默認顯示的是 HTML 代碼視圖,需要切換到設計視圖。從工具箱拖拽一個 Button 控件到頁面上,修改其 Text 屬性爲“生成 SQL Server Compact 數據庫”。

4.打開 Default.aspx 頁面的 C# 代碼編輯視圖,或者直接打開 Default.aspx.cs 文件。從本系列文章第四篇的示例代碼中,複製 From1.cs 文件的 GetTableNames, CopyTable, VerifyDatabaseExists, GenerateTableSchemaSql, GetSqlCeDataType 和 GetSqlCeNativeType 等方法到 Default.aspx.cs 文件中。

5.回到 Default.aspx 頁面的設計視圖,用鼠標雙擊 Button 控件,此時會跳到 Default.aspx.cs 的代碼編輯視圖,並生成了 Button 控件的 Click 事件處理方法。將以下代碼複製到 Click 事件處理方法中:

// 創建源 SQL Server 數據庫連接對象
string srcConnString = "Data Source=(local);Initial Catalog=Northwind;Integrated Security=True";
SqlConnection srcConnection
= new SqlConnection(srcConnString);

// 創建目標 SQL Server Compact Edition 數據庫連接對象
string destConnString = string.Format("Data Source={0};", Server.MapPath("Northwind.sdf"));
SqlCeConnection destConnection
= new SqlCeConnection(destConnString);

VerifyDatabaseExists(destConnString);

srcConnection.Open();
destConnection.Open();

// 複製數據
string[] tableNames = GetTableNames(srcConnection);
string query;
for (int i = 0; i < tableNames.Length; i++)
{
    query
= string.Format("SELECT * FROM [{0}]", tableNames[i]);
    CopyTable(srcConnection, destConnection, query, tableNames[i]);
}

srcConnection.Close();
destConnection.Close();

// 重定向到生成的 Northwind.sdf 文件的 url 地址(使瀏覽器提示下載)
Response.Redirect("Northwind.sdf");

這段代碼跟本系列文章第四篇的示例代碼非常相似,大家注意代碼中加亮的語句。

6.數據導入的代碼已經編寫完成,現在可以生成項目,並在瀏覽器中查看 Default.aspx 頁面。



出錯了!到底是什麼原因呢?

二、解鎖 SQL Server Compact Edition 對 ASP.NET 的支持

我在《SQL Server精簡版支不支持ASP.NET?》曾經探討過這個問題。“當前 SQL Server Compact Edition 並未針對網站數據庫用途進行優化。默認情況下,在 SQL Server Compact Edition 中阻塞了來自 ASP.NET 應用程序的連接。SQL Server Compact Edition 經過優化後,可在應用程序中作爲嵌入數據庫使用。使用 SQL Server Compact Edition 作爲網站數據庫要求支持多用戶和併發數據更改。這可能會導致性能問題。因此,不支持這些情形。其他版本的 SQL Server 2005(包括 SQL Server 2005 Express Edition)經過優化後,也可作爲網站數據庫使用。在使用 ASP.NET 創建 SQL Server Compact Edition 數據庫以實現同步操作的應用方案中,SQL Server Compact Edition 可與 ASP.NET 配合使用。使用下列代碼更改 SQL Server Compact Edition 的默認行爲,以便與 ASP.NET 配合使用:AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true)”——引自《SQL Server 2005 Compact Edition 聯機叢書》

7.爲了解決步驟6出現的錯誤,我在 Default.aspx 頁面上添加一個 CheckBox 控件 chkEnableSqlCe,並將它的 Text 屬性設置爲“允許在 ASP.NET 使用 SQL Server Compact”。在 Default.aspx.cs 的 Page_Load 方法中添加以下代碼:

if (chkEnableSqlCe.Checked)
{
    AppDomain.CurrentDomain.SetData(
"SQLServerCompactEditionUnderWebHosting"true);
}
else
{
    AppDomain.CurrentDomain.SetData(
"SQLServerCompactEditionUnderWebHosting"false);
}

8.重新編譯項目,並瀏覽 Default.aspx 頁面。頁面加載完成後,選中“允許在 ASP.NET 使用 SQL Server Compact”檢查框,再點擊“生成 SQL Server Compact 數據庫”按鈕。此時,Default.aspx 頁面將在後臺生成 SQL Server Compact Edition 數據庫文件 Northwind.sdf,並從 SQL Server 服務器的 Northwind 數據庫導入數據,最後將提示您下載 Northwind.sdf 文件。



三、總結

在很多場景中,我們可以使用 ASP.NET 根據各種條件在服務器端快速生成 SQL Server Compact Edition 數據庫文件(.sdf),並從數據庫服務器導入初始數據,再將動態生成的數據庫文件提供給客戶端程序下載。這樣可以加速和簡化 Windows Mobile 應用程序初始化本地數據庫的過程,因爲只需要傳輸文件而不需要進行復雜的數據同步。本文介紹的方案並沒有結束,實際上 SQL Server Compact Edition 數據庫文件的壓縮率是很高的。例如:本文的示例代碼生成的 Northwind.sdf 文件是 788 KB,經過 ZIP 標準壓縮後生成的 Northwind.zip 文件是 228 KB。爲了減少數據傳輸流量,同時也是爲了節約時間,我們還可以對生成的數據庫文件進行壓縮後,再提供給客戶端下載,客戶端再對文件進行解壓縮。

示例代碼下載:sqlce_data_import5.rar

作者:黎波
博客:http://upto.cnblogs.com/
日期:2008年3月5日

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章