Initial Commit
This commit is contained in:
247
Systems/SQLCE/Database.cs
Normal file
247
Systems/SQLCE/Database.cs
Normal file
@@ -0,0 +1,247 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Data.SqlServerCe;
|
||||
|
||||
namespace Sdaleo.Systems.SQLCE
|
||||
{
|
||||
/// <summary>
|
||||
/// Specific actions for SQL CE Databases
|
||||
/// </summary>
|
||||
public class SQLCEDatabase
|
||||
{
|
||||
#region Database Create / Exists
|
||||
|
||||
/// <summary>
|
||||
/// Checks to see if we can query the specified server for the Database (Existence check)
|
||||
/// </summary>
|
||||
/// <param name="credential">SQL CE Credentials</param>
|
||||
/// <param name="bExists">Returns true if the Database Exists, false otherwise</param>
|
||||
/// <returns>DBError Object with ErrorOccured, if error Occured</returns>
|
||||
public static DBError DatabaseExists(IConnectDb credential, out bool bExists)
|
||||
{
|
||||
bExists = false;
|
||||
DBError dbError = ValidationConsts.IsCredentialValid(credential, DBSystem.SQL_CE);
|
||||
if (dbError.ErrorOccured)
|
||||
return dbError;
|
||||
|
||||
// Check for File Existence
|
||||
if (File.Exists(credential.DataSource))
|
||||
{
|
||||
bExists = true;
|
||||
return dbError;
|
||||
}
|
||||
else
|
||||
return DBError.Create("Database File does not exist");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a new Database with the specified Credentials
|
||||
/// </summary>
|
||||
/// <param name="credential">SQL CE Credentials</param>
|
||||
/// <returns>DBError Object with ErrorOccured, if error Occured</returns>
|
||||
public static DBError DatabaseCreate(IConnectDb credential)
|
||||
{
|
||||
DBError dbError = ValidationConsts.IsCredentialValid(credential, DBSystem.SQL_CE);
|
||||
if (dbError.ErrorOccured)
|
||||
return dbError;
|
||||
|
||||
// First Create the Directory if it doesn't exists
|
||||
string path = Path.GetDirectoryName(credential.DataSource);
|
||||
if (!Directory.Exists(path))
|
||||
Directory.CreateDirectory(path);
|
||||
|
||||
// Now try to create the database if it doesn't exists
|
||||
bool bExists = false;
|
||||
dbError = DatabaseExists(credential, out bExists);
|
||||
if (!bExists)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (SqlCeEngine engine = new SqlCeEngine(credential.ConnectionString))
|
||||
{
|
||||
engine.CreateDatabase();
|
||||
}
|
||||
}
|
||||
catch (SqlCeException e)
|
||||
{
|
||||
dbError = DBMS.CreateErrorDBRetVal(DBSystem.SQL_CE, e);
|
||||
}
|
||||
}
|
||||
return dbError;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Database Copy / Delete
|
||||
|
||||
/// <summary>
|
||||
/// Copies a specified SQL CE Database to a new specified Database
|
||||
/// </summary>
|
||||
/// <param name="SourceCredential">SQL CE Credentials of Source Database</param>
|
||||
/// <param name="DestinationCredential">SQLCE Credential of Destination Database To be copied To</param>
|
||||
/// <returns>DBError Object with ErrorOccured, if error Occured</returns>
|
||||
public static DBError DatabaseCopy(IConnectDb SourceCredential, IConnectDb DestinationCredential)
|
||||
{
|
||||
DBError dbError = ValidationConsts.IsCredentialValid(SourceCredential, DBSystem.SQL_CE);
|
||||
if (dbError.ErrorOccured)
|
||||
return dbError;
|
||||
|
||||
dbError = ValidationConsts.IsCredentialValid(DestinationCredential, DBSystem.SQL_CE);
|
||||
if (dbError.ErrorOccured)
|
||||
return dbError;
|
||||
|
||||
// Make sure the Source Database exists
|
||||
bool bExists = false;
|
||||
dbError = DatabaseExists(SourceCredential, out bExists);
|
||||
if (!bExists)
|
||||
return dbError;
|
||||
|
||||
// Make sure the Destination Database does NOT Exist
|
||||
bExists = false;
|
||||
dbError = DatabaseExists(DestinationCredential, out bExists);
|
||||
if (bExists)
|
||||
return DBError.Create("Destination Credential Database already exists");
|
||||
|
||||
try
|
||||
{
|
||||
File.Copy(SourceCredential.DataSource, DestinationCredential.DataSource);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
dbError = DBError.Create(ex.Message);
|
||||
}
|
||||
return dbError;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Delete a specified SQLCE Database
|
||||
/// </summary>
|
||||
/// <param name="credential">SQL CE Credentials</param>
|
||||
/// <returns>DBError Object with ErrorOccured, if error Occured</returns>
|
||||
public static DBError DatabaseDelete(IConnectDb credential)
|
||||
{
|
||||
DBError dbError = ValidationConsts.IsCredentialValid(credential, DBSystem.SQL_CE);
|
||||
if (dbError.ErrorOccured)
|
||||
return dbError;
|
||||
|
||||
// Make sure the Source Database exists
|
||||
bool bExists = false;
|
||||
dbError = DatabaseExists(credential, out bExists);
|
||||
if (!bExists)
|
||||
return dbError;
|
||||
|
||||
try
|
||||
{
|
||||
File.Delete(credential.DataSource);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
dbError = DBError.Create(ex.Message);
|
||||
}
|
||||
return dbError;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Database Integrity
|
||||
|
||||
/// <summary>
|
||||
/// Shrinks the specified Database to reclaim wasted space
|
||||
/// </summary>
|
||||
/// <param name="credential">SQL CE Credentials</param>
|
||||
/// <returns>DBError Object with ErrorOccured, if error Occured</returns>
|
||||
public static DBError DatabaseShrink(IConnectDb credential)
|
||||
{
|
||||
DBError dbError = ValidationConsts.IsCredentialValid(credential, DBSystem.SQL_CE);
|
||||
if (dbError.ErrorOccured)
|
||||
return dbError;
|
||||
|
||||
// Now try to shrink the database if it exists
|
||||
bool bExists = false;
|
||||
dbError = DatabaseExists(credential, out bExists);
|
||||
if (bExists)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (SqlCeEngine engine = new SqlCeEngine(credential.ConnectionString))
|
||||
{
|
||||
engine.Shrink();
|
||||
}
|
||||
}
|
||||
catch (SqlCeException e)
|
||||
{
|
||||
dbError = DBMS.CreateErrorDBRetVal(DBSystem.SQL_CE, e);
|
||||
}
|
||||
}
|
||||
return dbError;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifies the specified Database in case it is corrupted
|
||||
/// </summary>
|
||||
/// <param name="credential">SQL CE Credentials</param>
|
||||
/// <returns>DBError Object with ErrorOccured, if error Occured</returns>
|
||||
public static DBError DatabaseVerify(IConnectDb credential)
|
||||
{
|
||||
DBError dbError = ValidationConsts.IsCredentialValid(credential, DBSystem.SQL_CE);
|
||||
if (dbError.ErrorOccured)
|
||||
return dbError;
|
||||
|
||||
// Now try to repair the database if it exists
|
||||
bool bExists = false;
|
||||
dbError = DatabaseExists(credential, out bExists);
|
||||
if (bExists)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (SqlCeEngine engine = new SqlCeEngine(credential.ConnectionString))
|
||||
{
|
||||
engine.Verify();
|
||||
}
|
||||
}
|
||||
catch (SqlCeException e)
|
||||
{
|
||||
dbError = DBMS.CreateErrorDBRetVal(DBSystem.SQL_CE, e);
|
||||
}
|
||||
}
|
||||
return dbError;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Repairs the specified Database in case it is corrupted
|
||||
/// </summary>
|
||||
/// <param name="credential">SQL CE Credentials</param>
|
||||
/// <returns>DBError Object with ErrorOccured, if error Occured</returns>
|
||||
public static DBError DatabaseRepair(IConnectDb credential)
|
||||
{
|
||||
DBError dbError = ValidationConsts.IsCredentialValid(credential, DBSystem.SQL_CE);
|
||||
if (dbError.ErrorOccured)
|
||||
return dbError;
|
||||
|
||||
// Now try to repair the database if it exists
|
||||
bool bExists = false;
|
||||
dbError = DatabaseExists(credential, out bExists);
|
||||
if (bExists)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (SqlCeEngine engine = new SqlCeEngine(credential.ConnectionString))
|
||||
{
|
||||
// Specify null destination connection string for in-place repair
|
||||
engine.Repair(null, RepairOption.RecoverAllPossibleRows);
|
||||
}
|
||||
}
|
||||
catch (SqlCeException e)
|
||||
{
|
||||
dbError = DBMS.CreateErrorDBRetVal(DBSystem.SQL_CE, e);
|
||||
}
|
||||
}
|
||||
return dbError;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user