56 lines
1.9 KiB
C#
56 lines
1.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.Common;
|
|
using System.Data.SqlServerCe;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace SQLCE4Umbraco
|
|
{
|
|
public static class SqlCeContextGuardian
|
|
{
|
|
private static SqlCeConnection _constantOpenConnection;
|
|
private static object objLock = new object();
|
|
|
|
// Awesome SQL CE 4 speed improvement by Erik Ejskov Jensen - SQL CE 4 MVP
|
|
// It's not an issue with SQL CE 4 that we never close the connection
|
|
public static SqlCeConnection Open(string connectionString)
|
|
{
|
|
var connectionStringBuilder = new DbConnectionStringBuilder();
|
|
try
|
|
{
|
|
connectionStringBuilder.ConnectionString = connectionString;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new ArgumentException("Bad connection string.", "connectionString", ex);
|
|
}
|
|
connectionStringBuilder.Remove("datalayer");
|
|
|
|
// SQL CE 4 performs better when there's always a connection open in the background
|
|
ensureOpenBackgroundConnection(connectionStringBuilder.ConnectionString);
|
|
|
|
SqlCeConnection conn = new SqlCeConnection(connectionStringBuilder.ConnectionString);
|
|
conn.Open();
|
|
|
|
return conn;
|
|
|
|
}
|
|
|
|
private static void ensureOpenBackgroundConnection(string connectionString)
|
|
{
|
|
lock (objLock)
|
|
{
|
|
if (_constantOpenConnection == null)
|
|
{
|
|
_constantOpenConnection = new SqlCeConnection(connectionString);
|
|
_constantOpenConnection.Open();
|
|
}
|
|
else if (_constantOpenConnection.State != ConnectionState.Open)
|
|
_constantOpenConnection.Open();
|
|
}
|
|
}
|
|
}
|
|
}
|