【问题标题】:Create SQLCE database programmatically [duplicate]以编程方式创建 SQLCE 数据库 [重复]
【发布时间】:2011-09-05 23:30:05
【问题描述】:

[已编辑 - 有答案]

以下是我以编程方式创建 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();
        }

    }
}

【问题讨论】:

  • 你确定那段代码抛出了异常吗?
  • 如果你遇到这样一个奇怪的错误,你会在你的 strack 跟踪中得到准确的代码行号。请提供更多详细信息,例如完整的异常消息和代码位置。
  • Close 不是必需的,因为您使用的是using

标签: c# sql-server-ce


【解决方案1】:

我使用过 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();
}

注意数据库只是一个文件,所以你可以通过查看文件是否存在来检查数据库是否存在,也可以通过删除文件来删除数据库。希望这会有所帮助。

【讨论】:

  • 您应该在 SqlCeEngine、SqlCeConnection 以及当然 SqlCeCommand 上使用 using 语句。
  • 几年前我在做这件事,我想像这个 try catch, finally 方法一样关闭连接。遗憾的是,我是在 C#.net 中自学的,我对所使用的新做法不太熟悉 :)。也就是说,我想我认为你们可以以正确的方式使用此代码,并将我的示例视为一种算法:D
  • 谢谢。根据您提供的内容,我已经重写了我的代码并用答案编辑了我的问题。
最近更新 更多