本節將指導您完成使用 Microsoft SQL Server 2000 Windows CE Edition (SQL Server CE) 數據庫時需要執行的主要任務。假定您沒有任何 SQL Server CE 數據庫,需要在新的 Microsoft Visual Studio .NET 項目中創建新的數據庫。
該演練包括以下任務:
- 創建新的 SQL Server CE 數據庫
- 讀取 SQL Server CE 數據庫數據
- 更改 SQL Server CE 數據庫中的數據
闡釋以上每個任務步驟的代碼旨在一起運行。不能在任務中運行僅用于特定步驟的代碼。有關完整代碼列表,請參見代碼列表:使用 SQL Server CE 數據庫。
創建新的數據庫
SQL Server CE 中的數據庫是存儲結構化數據的表集合。在可以存儲數據庫之前,必須創建數據庫。在創建數據庫之后,可以創建保存數據的表。
在本節中,您將創建一個新的數據庫,然后創建一個表,最后將數據添加到該表中。若要執行這些步驟,請使用 SQL Server CE (System.Data.SqlServerCe) .NET Framework 精簡版數據提供程序的 SqlCeConnection、SqlCeEngine 和 SqlCeCommand 類。
注意 不能在此任務中運行僅用于特定步驟的代碼。有關完整代碼列表,請參見代碼列表:使用 SQL Server CE 數據庫。
創建新的 SQL Server CE 數據庫
- 啟動 Visual Studio .NET,然后打開一個新項目。
- 創建對使用的命名空間的引用。
using System; using System.IO; using System.Text; using System.Data; using System.Data.SqlServerCe; using System.Collections; using System.Windows.Forms; using System.Data.Common; - 創建 WalkThrough 類。
public class WalkThrough { static void Main() { SqlCeConnection conn = null; try { - 驗證具有您打算使用的名稱的數據庫是否已存在。
if (File.Exists (Test.sdf) ) File.Delete (Test.sdf); - 使用 System.Data.SqlCeEngine 對象創建名為 Test.sdf 的空數據庫。
注意 SQL Server CE 中,數據庫名稱的文件擴展名為 .sdf。
SqlCeEngine engine = new SqlCeEngine (Data Source = Test.sdf); engine.CreateDatabase (); - 連接到這個新數據庫。
conn = new SqlCeConnection (Data Source = Test.sdf); conn.Open();
創建新表
- 使用 System.Data.SqlCeCommand 創建命令類的實例。
SqlCeCommand cmd = conn.CreateCommand();
- 運行命令 cmd 創建表。用于創建表的指令必須在 cmd.CommandText 所包含的 SQL 代碼中。
若要使用 SQL Server CE 的 SQL 編程語言創建表,請使用 CREATE TABLE 語法。有關更多信息,請參見《SQL Server CE 聯機手冊》中的用于 SQL Server CE 的 SQL 參考。
cmd.CommandText = CREATE TABLE TestTbl(col1 int PRIMARY KEY, col2 ntext, col3 money); cmd.ExecuteNonQuery();
將數據添加到新表中
- 運行命令以添加數據行。與創建表相同,用于添加行的指令也必須在 cmd.CommandText 所包含的 SQL 代碼中。
若要使用 SQL Server CE 的 SQL 編程語言將行添加到表中,請使用 INSERT 語法。有關更多信息,請參見《SQL Server CE 聯機手冊》中的用于 SQL Server CE 的 SQL 參考。
cmd.CommandText = INSERT INTO TestTbl(col1, col2, col3) VALUES (0, 'abc', 15.66); cmd.ExecuteNonQuery(); - 創建命令,使用參數將數據多次插入表中。
參數可以更高效地查詢數據庫,因為可以使用一組包含參數的 SQL 語句插入多個值。有關更多信息,請參見《SQL Server CE 聯機手冊》的在查詢中使用參數。
cmd.CommandText = INSERT INTO TestTbl(col1, col2, col3) VALUES (?, ?, ?); cmd.Parameters.Add(new SqlCeParameter(p1, SqlDbType.Int)); cmd.Parameters.Add(new SqlCeParameter(p2, SqlDbType.NText)); cmd.Parameters.Add(new SqlCeParameter(p3, SqlDbType.Money)); cmd.Parameters[p2].Size = 50; cmd.Prepare(); - 執行參數化命令,將數據插入表中。
cmd.Parameters[p1].Value = 1; cmd.Parameters[p2].Value = abc; cmd.Parameters[p3].Value = 15.66; cmd.ExecuteNonQuery(); - 清除參數,并檢查已插入表中的數據。
若要使用 SQL Server CE 的 SQL 編程語言讀取現有數據,請使用 SELECT 語法。有關更多信息,請參見《SQL Server CE 聯機手冊》中的用于 SQL Server CE 的 SQL 參考。
cmd.Parameters.Clear(); //Set the command text to a SELECT query. // cmd.CommandText = SELECT * FROM TestTbl;
讀取 SQL Server CE 數據庫數據
讀取數據庫數據是一種常見的任務,通常涉及對表行信息的訪問。為使用 System.Data.SqlServerCe 執行此任務,您需要 SqlCeDataReader 和 SqlCeCommand 對象。
注意 有關完整代碼列表,請參見代碼列表:使用 SQL Server CE 數據庫。
- 調用 SqlCeCommand 對象的 ExecuteReader 方法以創建 SqlCeDataReader 的實例。
SqlCeDataReader rdr = cmd.ExecuteReader();
- 指示數據讀取器 rdr 在行存在時在每行的列中顯示數據。
while (rdr.Read()) {MessageBox.Show(col1 = + rdr.GetInt32(0) + col2 = + rdr.GetString(1) + col3 = + rdr.GetSqlMoney(2)); }
更改 SQL Server CE 數據庫中的數據
在創建表后,可以以多種方式修改表中的數據:更改特定數據的屬性,添加和刪除數據行,甚至還可以通過修改表中的列來更改存儲數據的方式。
在本節中,您將更改表項的值,查找更改的表的數據并處理所有錯誤。為執行這些步驟,您將使用在前面的任務中使用的類:SqlCeCommand 和 SqlCeDataReader。另外,您將使用 SqlCeException 進行錯誤處理。
注意 不能在此任務中運行僅用于特定步驟的代碼。有關完整代碼列表,請參見代碼列表:使用 SQL Server CE 數據庫。
更新 SQL Server CE 表中的數據
- 設置命令對象以使用 UPDATE 語句。
若要使用 SQL Server CE 的 SQL 編程語言更改行列的值,請使用 UPDATE 語法。有關更多信息,請參見《SQL Server CE 聯機手冊》中的用于 SQL Server CE 的 SQL 參考。
cmd.CommandText = UPDATE TestTbl SET col2 = 'some new value' WHERE col1 = 0; cmd.ExecuteNonQuery();
讀取 SQL Server CE 表中的數據
- 設置命令對象以使用 SELECT 語句,然后通過執行 SqlCeCommand.ExecuteReader 創建數據讀取器的實例。
cmd.CommandText = SELECT * FROM TestTbl; rdr = cmd.ExecuteReader(); while (rdr.Read()) { MessageBox.Show( col1 = + rdr.GetInt32(0) + col2 = + rdr.GetString(1) + col3 = + rdr.GetSqlMoney(2)); } } - 使用 SqlCeException 捕獲任何錯誤,然后關閉與數據庫的連接。
catch (SqlCeException e) { ShowErrors(e); } finally { if(conn.State == ConnectionState.Open) conn.Close(); } } public static void ShowErrors(SqlCeException e) { SqlCeErrorCollection errorCollection = e.Errors; StringBuilder bld = new StringBuilder(); foreach (SqlCeError err in errorCollection) { bld.Append(\n Error Code: + err.HResult.ToString(X)); bld.Append(\n Message : + err.Message); bld.Append(\n Minor Err.: + err.NativeError); bld.Append(\n Source : + err.Source); foreach (int numPar in err.NumericErrorParameters) { if (0 != numPar) bld.Append(\n Num. Par. : + numPar); } foreach (string errPar in err.ErrorParameters) { if (String.Empty != errPar) bld.Append(\n Err. Par. : + errPar); } MessageBox.Show(bld.ToString()); bld.Remove(0, bld.Length); } } }
有關 SQL Server CE 中的錯誤處理的更多信息,請參見《SQL Server CE 聯機手冊》中的錯誤處理。
原文:http://msdn.microsoft.com/library/CHS/dv_evtuv/html/etconwalkthroughcreatingsqlservercedatabase.asp

