2011-06-01 49 views
16

[編輯 - 與答案]創建SQLCE數據庫編程

以下是我的代碼編程方式創建SQL CE數據庫:

/* get the Path */ 
var directoryName = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 
var fileName = System.IO.Path.Combine(directoryName, "Foo2Database.sdf"); 

/* check if exists */ 
if (File.Exists(fileName)) 
    File.Delete(fileName); 

string connStr = @"Data Source = " + fileName; 

/* create Database */ 
SqlCeEngine engine = new SqlCeEngine(connStr); 
engine.CreateDatabase(); 

/* create table and columns */ 
using (SqlCeConnection conn = new SqlCeConnection(connStr)) 
{ 
    using (SqlCeCommand cmd = new SqlCeCommand(@"CREATE TABLE FooTable (Foo_ID int, FooData NVARCHAR(200))", conn)) 
    { 
     try 
     { 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
     finally 
     { 
      conn.Close(); 
     } 

    } 
} 
+0

你確定這段代碼引發了Exception嗎? – 2011-06-01 06:20:58

+0

如果你遇到這樣一個奇怪的錯誤,你會在你的痕跡中得到確切的代碼行號。請提供更多詳細信息,如完整的異常消息和代碼位置。 – ibram 2011-06-01 06:51:15

+0

因爲您正在使用'using',所以'Close'不是必需的。 – mafu 2011-08-31 13:33:04

回答

29

我與SQLCE 3.1和SharpDevelop的,試試這個代碼和工作看看這是你想要的:

string connStr = "Data Source = FooDatabase.sdf; Password = SomePassword"; 

if (File.Exists("FooDatabase.sdf")) 
    File.Delete("FooDatabase.sdf"); 

SqlCeEngine engine = new SqlCeEngine(connStr); 
engine.CreateDatabase(); 

SqlCeConnection conn = null; 


try 
{ 
    conn = new SqlCeConnection(connStr); 
    conn.Open(); 

    SqlCeCommand cmd = conn.CreateCommand(); 
    cmd.CommandText = "CREATE TABLE FooTable(col1 int, col2 ntext)"; 
    cmd.ExecuteNonQuery(); 
} 
catch 
{ 

} 
finally 
{ 
    conn.Close(); 
} 

請注意,數據庫只是一個文件,所以你可以通過查看數據庫是否存在如果文件存在,也可以通過刪除文件來刪除數據庫。希望這可以幫助。

+4

你應該在SqlCeEngine,SqlCeConnection和SqlCeCommand上使用using語句。 – 2011-06-01 06:17:49

+0

幾年前,我曾在這方面做過工作,並且想要關閉連接,就像在此嘗試捕捉,最終方法一樣。可悲的是,在C#.net中自學,我不太熟悉使用的新實踐:)。說,我想我認爲你們可以以正確的方式使用此代碼,並認爲我的例子是一種算法:D – midhunhk 2011-06-01 06:54:29

+0

謝謝。根據你給出的內容,我重寫了我的代碼,並用答案編輯我的問題。 – KMC 2011-06-01 08:24:43