SQL Server CE 表未找到错误

Posted

技术标签:

【中文标题】SQL Server CE 表未找到错误【英文标题】:SQL Server CE table not found error 【发布时间】:2012-01-15 02:29:35 【问题描述】:

我正在尝试在 Windows Phone Mango 上使用 SQL Server CE。这是我的DataContext

public class FooDataContext : DataContext

    private static readonly string DB_CONNECTION_STRING = "Data Source=isostore:/foo.sdf";

    // Pass the connection string to the base class.
    public FooDataContext() : base(DB_CONNECTION_STRING)
     

    // can this be a property?
    public Table<Foo> Items;

    public void ClearDatabase()
    
        if (DatabaseExists())
        
            DeleteDatabase();
        
    

    public void EnsureDatabaseExists()
    
        if (!DatabaseExists())
        
            CreateDatabase();
            SubmitChanges();
        
    

在主页面的构造函数中,我调用EnsureDatabaseExists()。如果我更改了架构,我还会调用ClearDatabase()

//fooData.ClearDatabase();
fooData.EnsureDatabaseExists();

Foo 的列是 intdoubleDateTime。当我在没有ClearDatabase() 调用的情况下运行应用程序时,一旦我尝试访问fooContext.Items,就会收到以下错误:

指定的表不存在。 [福]

这里发生了什么?如果我全新安装该应用程序,一切正常。

【问题讨论】:

SubmitChanges(); 是做什么的?如果数据库已经存在,则不会执行该行。 【参考方案1】:

仅当调用 CreateDatabase() 或通过 DatabaseSchemaUpdater.Execute() 方法显式更新架构时,才会创建 Linq To SQL DataContext 的后备表结构。

我怀疑您的情况是,您正在向数据模型添加新的实体类型,但是您实际上并没有通过 DatabaseSchemaUpdater 更新架构。这会导致 Linq To SQL 生成一个查询,该查询引用尚未在数据库引擎中创建的表。

如果您希望能够处理应用程序中的架构更改,我建议您查看 DatabaseSchemaUpdater 类。

http://msdn.microsoft.com/en-us/library/hh133477(v=VS.95).aspx

【讨论】:

以上是关于SQL Server CE 表未找到错误的主要内容,如果未能解决你的问题,请参考以下文章

如何解决我的 SQL Server CE 错误?

SQL Server CE 错误 不允许访问数据库文件

.dbo 上的 SQL Server CE 字符串错误。句法

SQL Server CE - 内部错误:无法打开共享内存区域

ASP.NET Web 应用程序 SQL Server CE 数据库配置错误 [重复]

关于SQL SERVER 解析XML遇到的小问题——0xc00ce508