MS SQL CE DataContext数据库存在/删除

时间:2017-01-22 11:14:22

标签: c# linq sql-server-ce

之前我使用过SQLite,但是我无法使用DataContext创建数据库(AFAIK,SQLite不支持它)所以我切换到MS SQL CE 4(我知道它已被弃用但它可以仍然是xcopy安装和相对较小的)但我有数据库创建的问题。

首先,我尝试过没有打开连接,但DatabaseExists返回false。我认为我必须打开一个连接,所以现在我正在尝试使用DataContext的{​​{1}}和DatabaseExists打开连接。我正在创建这样的连接:

DeleteDatabase

其中SqlCeConnectionStringBuilder stringBuilder = new SqlCeConnectionStringBuilder(); stringBuilder.DataSource = dataSource; connection = new SqlCeConnection(stringBuilder.ConnectionString); 是数据库的相对名称。

然后我尝试使用强类型dataSouce(称为DataContext)来确定数据库是否存在并创建(如果不存在)。

Context

但是protected DBDataProvider(IConnectionProvider connectionProvider) { connection = connectionProvider.Connection; dataContext = new Context(connection); } public bool CreateDatabase(bool overwriteIfExists = true) { try { connection.Open(); if (dataContext.DatabaseExists()) { if (overwriteIfExists) dataContext.DeleteDatabase(); else return false; } connection.Close(); } catch { // in this case the database does not exist // at least with MS SQL CE } try { dataContext.CreateDatabase(); } catch (Exception ex) { // ... } return true; } 总是返回false。所以我认为这一定是一个问题所以我在关闭连接后移动DatabaseExists调用但没有任何反应,文件仍在那里。

DeleteDatabase

由于数据库文件仍然存在,try { connection.Open(); // removed from here... connection.Close(); dataContext.DeleteDatabase(); } 会引发异常:

CreateDatabase

这是一个错误还是我错过了什么?

修改

创建了一个迷你测试代码,我能够重现这个问题。

  • 首先运行:没问题,创建了数据库文件。
  • 第二次运行:异常,因为根据数据上下文对象,数据库不存在

以下是代码:

{System.Data.SqlServerCe.SqlCeException (0x80004005): File already exists. Try using a different database name. [ File name = TestDB.db ] at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.CreateDatabase()

编辑2:

使用正确的(sdf)文件扩展名解决了问题。

1 个答案:

答案 0 :(得分:1)

ErikEJ的评论开始,我发现了问题:文件扩展名。

似乎在MS SQL CE中我必须使用 .sdf 文件扩展名。