【问题标题】:SQL Server CE exception InvalidDatabaseFormatExceptionSQL Server CE 异常 InvalidDatabaseFormatException
【发布时间】:2013-02-20 01:51:11
【问题描述】:

我正在尝试调用这个函数:

public Exception SetData(string Data)
{
    public string conectionstring = "Data Source=MyData1.sdf;Encrypt Database=True;Password=as!;File Mode=Read Write; persist Security Info=False;LCID= 1033";

    query = "Insert into [CopyData] values (@data)";
    try
    {
        con = new SqlCeConnection(conectionstring);
        com = new SqlCeCommand(query, con);
        com.Parameters.AddWithValue("@data",Data);con.Open();
        com.ExecuteNonQuery();
        con.Close();
        return null;
    }
    catch (Exception ex)
    {
        return ex;
    }
}

Main() 使用代码

class Program
{
    static void Main(string[] args)
    {
        DB cdb = new DB();
        string b = "hello";
        Exception e = cdb.SetData(b);
        Console.WriteLine(e);
        Console.ReadLine();
    }
}

但是我遇到了这个异常

System.Data.SqlServerCe.SqlCeInvalidDatabaseFormatException

数据库文件已由早期版本的 SQL Server Compact 创建。 请使用 SqlCeEngine.Upgrade() 升级

我尝试通过调用SqlCeEngine.Upgrade() as 来解决它

public Exception SetData(string Data)
{
    public string conectionstring = "Data Source=MyData1.sdf;Encrypt Database=True;Password=as!;File Mode=Read Write; persist Security Info=False;LCID= 1033";
    public string conectionstringc = "Data Source=MyData1.sdf;Encrypt Database=True;Password=as!;File Mode=Read Write; persist Security Info=False;LCID= 1033;Case Sensitive=true";
    query = "Insert into [CopyData] values (@data)";
    try
    {
        SqlCeEngine engine = new SqlCeEngine(conectionstring);
        engine.Upgrade(conectionstringc);
        con = new SqlCeConnection(conectionstring);
        com = new SqlCeCommand(query, con);
        com.Parameters.AddWithValue("@data",Data);con.Open();
        com.ExecuteNonQuery();
        con.Close();
        return null;
    }
    catch (Exception ex)
    {
        return ex;
    }
}

但后来出现了这个异常

System.Data.SqlServerCe.SqlCeException

不需要升级数据库,数据库已经是兼容格式了

我做错了什么?

【问题讨论】:

  • 您的项目引用了哪个版本的 Systsem.data.SqlServerCe.dll 以及哪个数据库文件版本是 Mydatabase.sdf ?
  • Systsem.data.SqlServerCe.dll 版本 4.0.8876.1 。我不知道如何获取数据库文件的版本。
  • 也许this blog post 可能会对您有所帮助。至少它包含一个确定sdf文件版本的函数。
  • 你可以使用我的 SQL Server Compact Toolbox 插件来检测数据库文件版本
  • 检查您的项目中是否有最新版本的 sqlCompact 框架。您的数据库可能比您的 sqlCe 驱动程序更新。

标签: c# asp.net sql windows sql-server-ce


【解决方案1】:

插入查询错误。

正确的格式是:

“插入 INTO 表名(用逗号分隔的字段)值(用逗号分隔的 DiffvaluesDelimited)”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2011-01-13
    相关资源
    最近更新 更多