2011-06-01 34 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

相关问题