Udostępnij za pośrednictwem


Upgrade SQL CE Database from 3.1 to 3.5

var engine = new System.Data.SqlServerCe.SqlCeEngine("Data Source=" + filename);

engine.EnsureVersion35(filename);

--HELPER CLASS---

public static class SqlCeUpgrade

{

public static void EnsureVersion35(this SqlCeEngine engine, string filename)

{

try

{

SQLCEVersion fileversion = DetermineVersion(filename);

if (fileversion == SQLCEVersion.SQLCE20)

throw new ApplicationException("Unable to upgrade from 2.0 to 3.5");

if (SQLCEVersion.SQLCE35 > fileversion)

{

engine.Upgrade();

}

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

throw;

}

}

private enum SQLCEVersion

{

SQLCE20 = 0,

SQLCE30 = 1,

SQLCE35 = 2

}

private static SQLCEVersion DetermineVersion(string filename)

{

var versionDictionary = new Dictionary<int, SQLCEVersion>

{

{ 0x73616261, SQLCEVersion.SQLCE20 },

{ 0x002dd714, SQLCEVersion.SQLCE30},

{ 0x00357b9d, SQLCEVersion.SQLCE35}

};

int versionLONGWORD = 0;

try

{

using (var fs = new FileStream(filename, FileMode.Open))

{

fs.Seek(16, SeekOrigin.Begin);

using (BinaryReader reader = new BinaryReader(fs))

{

versionLONGWORD = reader.ReadInt32();

}

}

}

catch

{

throw;

}

if (versionDictionary.ContainsKey(versionLONGWORD))

{

return versionDictionary[versionLONGWORD];

}

else

{

throw new ApplicationException("Unable to determine database file version");

}

}

}

Comments

  • Anonymous
    November 30, 2011
    The comment has been removed