/// <summary> /// 上下文初始化器(只赋值,不初始化,有可能被重复创建两次) /// </summary> /// <param name="connectionString">连接字符串</param> /// <param name="dbType">数据库类型</param> /// <param name="commandTimeout">命令超时时间</param> /// <param name="dataVer">数据库版本</param> public ContextConnection(string connectionString, eumDbType dbType, int commandTimeout, string dataVer) { this.ConnectionString = connectionString; this.DbType = dbType; this.CommandTimeout = commandTimeout; this.DataVer = dataVer; }
/// <summary> /// 构造函数 /// </summary> /// <param name="connectionString">数据库连接字符串</param> /// <param name="dbType">数据库类型</param> /// <param name="commandTimeout">数据库执行时间,单位秒</param> /// <param name="tranLevel"> /// 未提交读(read uncommitted): 当事务A更新某条数据时,不容许其他事务来更新该数据,但可以读取。 /// 提交读(read committed): 当事务A更新某条数据时,不容许其他事务进行任何操作包括读取,但事务A读取时,其他事务可以进行读取、更新。 /// 重复读(repeatable read): 当事务A更新数据时,不容许其他事务进行任何操作,但当事务A进行读取时,其他事务只能读取,不能更新。 /// 序列化(serializable): 最严格的隔离级别,事务必须依次进行。 /// </param> public DbExecutor(string connectionString, eumDbType dbType = eumDbType.SqlServer, int commandTimeout = 30, IsolationLevel tranLevel = IsolationLevel.Unspecified) { _connectionString = connectionString; _commandTimeout = commandTimeout; DataType = dbType; OpenTran(tranLevel); }
/// <summary> /// 通过自定义数据链接符,连接数据库 /// </summary> /// <param name="connectionString">数据库连接字符串</param> /// <param name="db">数据库类型</param> /// <param name="commandTimeout">SQL执行超时时间</param> /// <param name="dataVer">数据库版本(针对不同的数据库版本的优化)</param> protected DbContext(string connectionString, eumDbType db = eumDbType.SqlServer, int commandTimeout = 30, string dataVer = null) { _contextConnection = new ContextConnection(connectionString, db, commandTimeout, dataVer); // 实例化子类中,所有Set属性 ContextSetTypeCacheManger.Cache(this.GetType()).Item2(this); }
/// <summary> /// 构造函数 /// </summary> /// <param name="dbType">数据库类型</param> /// <param name="connectionString">数据库连接字符串</param> /// <param name="commandTimeout">数据库执行时间,单位秒</param> /// <param name="tranLevel">开启事务等级</param> public DbExecutor(string connectionString, eumDbType dbType = eumDbType.SqlServer, int commandTimeout = 30, IsolationLevel tranLevel = IsolationLevel.Unspecified) { _connectionString = connectionString; _commandTimeout = commandTimeout; DataType = dbType; OpenTran(tranLevel); }
/// <summary> /// 压缩数据库 /// </summary> /// <param name="dataType">数据库类型</param> /// <param name="connetionString">连接字符串</param> public static void Compression(string connetionString, eumDbType dataType = eumDbType.SqlServer) { var db = new DbExecutor(connetionString, dataType, 30); switch (dataType) { case eumDbType.SQLite: db.ExecuteNonQuery(CommandType.Text, "VACUUM", null); break; default: throw new NotImplementedException("该数据库不支持该方法!"); } }
/// <summary> /// 返回数据库类型名称 /// </summary> /// <param name="dbType">数据库类型</param> /// <param name="dataVer">数据库版本</param> public static AbsDbProvider CreateInstance(eumDbType dbType, string dataVer = null) { switch (dbType) { #if !CORE case eumDbType.OleDb: return new OleDbProvider(); case eumDbType.Oracle: return new OracleProvider(); #endif case eumDbType.MySql: return new MySqlProvider(); case eumDbType.SQLite: return new SqLiteProvider(); case eumDbType.PostgreSql: return new PostgreSqlProvider(); } return new SqlServerProvider(); }
/// <summary> /// 获取数据库连接对象 /// </summary> /// <param name="dbType">数据库类型</param> /// <param name="connectionString">连接字符串</param> public static DbConnection GetDbConnection(eumDbType dbType, string connectionString) { DbConnection conn; switch (dbType) { case eumDbType.SqlServer: conn = new SqlConnection(connectionString); break; default: conn = AbsDbProvider.CreateInstance(dbType).DbProviderFactory.CreateConnection(); break; } conn.ConnectionString = connectionString; return conn; }
/// <summary> /// 获取数据库连接对象 /// </summary> /// <param name="dbType">数据库类型</param> /// <param name="connectionString">连接字符串</param> public static DbConnection GetDbConnection(eumDbType dbType, string connectionString) { DbConnection conn; switch (dbType) { case eumDbType.SqlServer: conn = new SqlConnection(connectionString); break; default: conn = AbsDbProvider.CreateInstance(dbType).DbProviderFactory.CreateConnection(); break; } conn.ConnectionString = connectionString; return(conn); }
/// <summary> /// 返回数据库类型名称 /// </summary> /// <param name="dbType">数据库类型</param> public static DbProviderFactory CreateDbProviderFactory(eumDbType dbType) { switch (dbType) { case eumDbType.MySql: return DbProviderFactories.GetFactory("MySql.Data.MySqlClient"); case eumDbType.OleDb: return DbProviderFactories.GetFactory("System.Data.OleDb"); case eumDbType.Oracle: return DbProviderFactories.GetFactory("System.Data.OracleClient"); case eumDbType.SQLite: return DbProviderFactories.GetFactory("System.Data.SQLite"); case eumDbType.SqlServer: return DbProviderFactories.GetFactory("System.Data.SqlClient"); } return DbProviderFactories.GetFactory("System.Data.SqlClient"); }
/// <summary> /// 返回数据库类型名称 /// </summary> /// <param name="dbType">数据库类型</param> /// <param name="dataVer">数据库版本</param> public static AbsDbProvider CreateInstance(eumDbType dbType, string dataVer = null) { switch (dbType) { case eumDbType.OleDb: return(new OleDbProvider()); case eumDbType.MySql: return(new MySqlProvider()); case eumDbType.SQLite: return(new SqLiteProvider()); case eumDbType.Oracle: return(new OracleProvider()); case eumDbType.PostgreSql: return(new PostgreSqlProvider()); } switch (dataVer) { case "2000": return(new SqlServer2000Provider()); } return(new SqlServerProvider()); }
/// <summary> /// 通过自定义数据链接符,连接数据库 /// </summary> /// <param name="connectionString">数据库连接字符串</param> /// <param name="db">数据库类型</param> /// <param name="commandTimeout">SQL执行超时时间</param> protected DbContext(string connectionString, eumDbType db = eumDbType.SqlServer, int commandTimeout = 30) : base(connectionString, db, commandTimeout) { }
/// <summary> /// 通过自定义数据链接符,连接数据库 /// </summary> /// <param name="connectionString">数据库连接字符串</param> /// <param name="db">数据库类型</param> /// <param name="commandTimeout">SQL执行超时时间</param> /// <param name="dataVer">数据库版本(针对不同的数据库版本的优化)</param> /// <param name="isUnitOfWork">是否工作单元模式</param> public DbContext(string connectionString, eumDbType db, int commandTimeout = 30, string dataVer = null, bool isUnitOfWork = false) : this(isUnitOfWork) { _internalContext.ContextConnection = new ContextConnection(connectionString, db, commandTimeout, dataVer); }