Files
Sdaleo/Systems/SQLCE/Database.cs

250 lines
9.3 KiB
C#

#if SQLCOMPACT
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
}
}
#endif