using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.OracleClient;
using System.Data.OleDb;
using MySql.Data.MySqlClient;
using System.Data.SQLite;
namespace Easy4net.DBUtility
{
///
/// 数据生成工厂类
///
public class DbFactory
{
private DbFactory()
{
}
///
/// 根据数据库连接字符串以及数据库类型创建一个数据库工厂对象
///
/// 数据库连接字符串
/// 数据库类型
///
public static DbFactory NewInstance(string connectionString, DatabaseType dbType)
{
DbFactory factory = new DbFactory();
factory.connectionString = connectionString;
factory.dbType = dbType;
factory.DbParmChar = factory.CreateDbParmCharacter();
return factory;
}
private string connectionString;
private DatabaseType dbType;
private string dbParmChar;
///
/// 数据库类型
///
public DatabaseType DbType
{
get { return dbType; }
set { value = dbType; }
}
///
/// 连接字符串
///
public string ConnectionString
{
get { return connectionString; }
set { value = connectionString; }
}
///
/// 参数的前缀字符
///
public string DbParmChar
{
get { return dbParmChar; }
set { dbParmChar = value; }
}
///
/// 根据配置文件中所配置的数据库类型
/// 来获取命令参数中的参数符号oracle为":",sqlserver为"@"
///
///
public string CreateDbParmCharacter()
{
string character = string.Empty;
switch (dbType)
{
case DatabaseType.SQLSERVER:
character = "@";
break;
case DatabaseType.ORACLE:
character = ":";
break;
case DatabaseType.MYSQL:
character = "?";
break;
case DatabaseType.ACCESS:
character = "@";
break;
case DatabaseType.SQLITE:
character = "@";
break;
default:
throw new Exception("数据库类型目前不支持!");
}
return character;
}
///
/// 根据配置文件中所配置的数据库类型和传入的
/// 数据库链接字符串来创建相应数据库连接对象
///
///
public IDbConnection CreateDbConnection()
{
IDbConnection conn = null;
switch (dbType)
{
case DatabaseType.SQLSERVER:
conn = new SqlConnection(connectionString);
break;
case DatabaseType.ORACLE:
conn = new OracleConnection(connectionString);
break;
case DatabaseType.MYSQL:
conn = new MySqlConnection(connectionString);
break;
case DatabaseType.ACCESS:
conn = new OleDbConnection(connectionString);
break;
case DatabaseType.SQLITE:
conn = new SQLiteConnection(connectionString);
break;
default:
throw new Exception("数据库类型目前不支持!");
}
return conn;
}
///
/// 根据配置文件中所配置的数据库类型
/// 来创建相应数据库命令对象
///
///
public IDbCommand CreateDbCommand()
{
IDbCommand cmd = null;
switch (dbType)
{
case DatabaseType.SQLSERVER:
cmd = new SqlCommand();
break;
case DatabaseType.ORACLE:
cmd = new OracleCommand();
break;
case DatabaseType.MYSQL:
cmd = new MySqlCommand();
break;
case DatabaseType.ACCESS:
cmd = new OleDbCommand();
break;
case DatabaseType.SQLITE:
cmd = new SQLiteCommand();
break;
default:
throw new Exception("数据库类型目前不支持!");
}
return cmd;
}
///
/// 根据配置文件中所配置的数据库类型
/// 来创建相应数据库适配器对象
///
///
public IDbDataAdapter CreateDataAdapter()
{
IDbDataAdapter adapter = null;
switch (dbType)
{
case DatabaseType.SQLSERVER:
adapter = new SqlDataAdapter();
break;
case DatabaseType.ORACLE:
adapter = new OracleDataAdapter();
break;
case DatabaseType.MYSQL:
adapter = new MySqlDataAdapter();
break;
case DatabaseType.ACCESS:
adapter = new OleDbDataAdapter();
break;
case DatabaseType.SQLITE:
adapter = new SQLiteDataAdapter();
break;
default:
throw new Exception("数据库类型目前不支持!");
}
return adapter;
}
///
/// 根据配置文件中所配置的数据库类型
/// 和传入的命令对象来创建相应数据库适配器对象
///
///
public IDbDataAdapter CreateDataAdapter(IDbCommand cmd)
{
IDbDataAdapter adapter = null;
switch (dbType)
{
case DatabaseType.SQLSERVER:
adapter = new SqlDataAdapter((SqlCommand)cmd);
break;
case DatabaseType.ORACLE:
adapter = new OracleDataAdapter((OracleCommand)cmd);
break;
case DatabaseType.MYSQL:
adapter = new MySqlDataAdapter((MySqlCommand)cmd);
break;
case DatabaseType.ACCESS:
adapter = new OleDbDataAdapter((OleDbCommand)cmd);
break;
case DatabaseType.SQLITE:
adapter = new SQLiteDataAdapter((SQLiteCommand)cmd);
break;
default: throw new Exception("数据库类型目前不支持!");
}
return adapter;
}
///
/// 根据配置文件中所配置的数据库类型
/// 来创建相应数据库的参数对象
///
///
public IDbDataParameter CreateDbParameter()
{
IDbDataParameter param = null;
switch (dbType)
{
case DatabaseType.SQLSERVER:
param = new SqlParameter();
break;
case DatabaseType.ORACLE:
param = new OracleParameter();
break;
case DatabaseType.MYSQL:
param = new MySqlParameter();
break;
case DatabaseType.ACCESS:
param = new OleDbParameter();
break;
case DatabaseType.SQLITE:
param = new SQLiteParameter();
break;
default:
throw new Exception("数据库类型目前不支持!");
}
return param;
}
///
/// 根据配置文件中所配置的数据库类型
/// 来创建相应数据库的参数对象
///
///
public IDbDataParameter CreateDbParameter(string paramName, object value)
{
if (dbType == DatabaseType.ACCESS || dbType == DatabaseType.SQLITE)
{
paramName = "@" + paramName;
}
IDbDataParameter param = CreateDbParameter();
param.ParameterName = paramName;
param.Value = value;
return param;
}
///
/// 根据配置文件中所配置的数据库类型
/// 来创建相应数据库的参数对象
///
///
public IDbDataParameter CreateDbParameter(string paramName, object value, DbType _dataType)
{
if (dbType == DatabaseType.ACCESS || dbType == DatabaseType.SQLITE)
{
paramName = "@" + paramName;
}
IDbDataParameter param = CreateDbParameter();
param.DbType = _dataType;
param.ParameterName = paramName;
param.Value = value;
return param;
}
///
/// 根据配置文件中所配置的数据库类型
/// 来创建相应数据库的参数对象
///
///
public IDbDataParameter CreateDbParameter(string paramName, object value, ParameterDirection direction)
{
if (dbType == DatabaseType.ACCESS || dbType == DatabaseType.SQLITE)
{
paramName = "@" + paramName;
}
IDbDataParameter param = CreateDbParameter();
param.Direction = direction;
param.ParameterName = paramName;
param.Value = value;
return param;
}
///
/// 根据配置文件中所配置的数据库类型
/// 来创建相应数据库的参数对象
///
///
public IDbDataParameter CreateDbParameter(string paramName, object value, int size, ParameterDirection direction)
{
if (dbType == DatabaseType.ACCESS || dbType == DatabaseType.SQLITE)
{
paramName = "@" + paramName;
}
IDbDataParameter param = CreateDbParameter();
param.Direction = direction;
param.ParameterName = paramName;
param.Value = value;
param.Size = size;
return param;
}
///
/// 根据配置文件中所配置的数据库类型
/// 来创建相应数据库的参数对象
///
///
public IDbDataParameter CreateDbOutParameter(string paramName, int size)
{
if (dbType == DatabaseType.ACCESS || dbType == DatabaseType.SQLITE)
{
paramName = "@" + paramName;
}
IDbDataParameter param = CreateDbParameter();
param.Direction = ParameterDirection.Output;
param.ParameterName = paramName;
param.Size = size;
return param;
}
///
/// 根据配置文件中所配置的数据库类型
/// 来创建相应数据库的参数对象
///
///
public IDbDataParameter CreateDbParameter(string paramName, object value, DbType _dataType, ParameterDirection direction)
{
if (dbType == DatabaseType.ACCESS || dbType == DatabaseType.SQLITE)
{
paramName = "@" + paramName;
}
IDbDataParameter param = CreateDbParameter();
param.Direction = direction;
param.DbType = _dataType;
param.ParameterName = paramName;
param.Value = value;
return param;
}
///
/// 根据配置文件中所配置的数据库类型
/// 和传入的参数来创建相应数据库的参数数组对象
///
///
public IDbDataParameter[] CreateDbParameters(int size)
{
int i = 0;
IDbDataParameter[] param = null;
switch (dbType)
{
case DatabaseType.SQLSERVER:
param = new SqlParameter[size];
while (i < size) { param[i] = new SqlParameter(); i++; }
break;
case DatabaseType.ORACLE:
param = new OracleParameter[size];
while (i < size) { param[i] = new OracleParameter(); i++; }
break;
case DatabaseType.MYSQL:
param = new MySqlParameter[size];
while (i < size) { param[i] = new MySqlParameter(); i++; }
break;
case DatabaseType.ACCESS:
param = new OleDbParameter[size];
while (i < size) { param[i] = new OleDbParameter(); i++; }
break;
case DatabaseType.SQLITE:
param = new SQLiteParameter[size];
while (i < size) { param[i] = new SQLiteParameter(); i++; }
break;
default:
throw new Exception("数据库类型目前不支持!");
}
return param;
}
///
/// 根据配置文件中所配置的数据库类型
/// 来创建相应数据库的事物对象
///
///
public IDbTransaction CreateDbTransaction()
{
IDbConnection conn = CreateDbConnection();
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn.BeginTransaction();
}
///
/// 创建数据库的事物对象
///
///
///
public IDbTransaction CreateDbTransaction(System.Data.IsolationLevel level)
{
IDbConnection conn = CreateDbConnection();
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn.BeginTransaction(level);
}
}
}