You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.5 KiB
C#
84 lines
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.Common;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
|
|
namespace Mesnac.Codd.Session
|
|
{
|
|
public class DbSession : IDisposable
|
|
{
|
|
public DbSession(DbProviderFactory factory, string connstr)
|
|
{
|
|
this.ConnectionString = connstr;
|
|
this.ProviderFactory = factory;
|
|
}
|
|
public string ConnectionString { get; set; }
|
|
public DbProviderFactory ProviderFactory { get; set; }
|
|
private DbConnection _connection = null;
|
|
public DbConnection Connection
|
|
{
|
|
get
|
|
{
|
|
if (_connection == null)
|
|
{
|
|
this._connection = this.ProviderFactory.CreateConnection();
|
|
this._connection.ConnectionString = this.ConnectionString;
|
|
}
|
|
return _connection;
|
|
}
|
|
}
|
|
private DbCommand _command = null;
|
|
public DbCommand Command
|
|
{
|
|
get
|
|
{
|
|
if (_command == null)
|
|
{
|
|
this._command = this.ProviderFactory.CreateCommand();
|
|
this._command.Connection = this.Connection;
|
|
this._command.CommandType = System.Data.CommandType.Text;
|
|
}
|
|
return _command;
|
|
}
|
|
}
|
|
|
|
public void Close()
|
|
{
|
|
try
|
|
{
|
|
this.Connection.Close();
|
|
this.Connection.Dispose();
|
|
this.Command.Dispose();
|
|
}
|
|
catch { }
|
|
finally
|
|
{
|
|
this._connection = null;
|
|
this._command = null;
|
|
}
|
|
}
|
|
public void Dispose()
|
|
{
|
|
this.Close();
|
|
this.ProviderFactory = null;
|
|
}
|
|
}
|
|
|
|
public static class DbSessionFactory
|
|
{
|
|
private static Dictionary<string, DbSession> dbSessionFactoryList = new Dictionary<string, DbSession>();
|
|
public static DbSession GetDbSession(string connectionString)
|
|
{
|
|
DbSession session = null;
|
|
if (!dbSessionFactoryList.TryGetValue(connectionString, out session))
|
|
{
|
|
DbProviderFactory factory = System.Data.SqlClient.SqlClientFactory.Instance;
|
|
session = new DbSession(factory, connectionString);
|
|
dbSessionFactoryList.Add(connectionString, session);
|
|
}
|
|
return session;
|
|
}
|
|
}
|
|
}
|