Обнаружение и обновление версии MSSQLCE - PullRequest
1 голос
/ 17 августа 2011

Это мой код "Обновить при необходимости":

        try
        {
            cn.Open();
        }
        catch (System.Data.SqlServerCe.SqlCeInvalidDatabaseFormatException ex) 
        {
            //Try to upgrade
            SqlCeEngine engine = new SqlCeEngine(strConnection); 
            engine.Upgrade(strConnection);
            cn.Open();

        }

На практике он обновляет v3.5 db до v4.0.Есть ли лучшее решение?Было бы хорошо, если бы я обнаружил установленную версию движка и БД.

1 Ответ

3 голосов
/ 10 октября 2011

См. Это для определения версии файла: Как я могу обновить мою базу данных sql Server CE 3.5 sdf до Sql Server CE 4.0?

И этот код может обнаружить установленные версии Engine:

    internal static bool IsV40Installed()
    {
        try
        {
            System.Reflection.Assembly.Load("System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
        }
        catch (System.IO.FileNotFoundException)
        {
            return false;
        }
        try
        {
            var factory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SqlServerCe.4.0");
        }
        catch (System.ArgumentException)
        {
            return false;
        }
        return true;
    }

    internal static bool IsV35Installed()
    {
        try
        {
            System.Reflection.Assembly.Load("System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
        }
        catch (System.IO.FileNotFoundException)
        {
            return false;
        }
        try
        {
            var factory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SqlServerCe.3.5");
        }
        catch (System.ArgumentException)
        {
            return false;
        }
        return true;
    }
...