Esempio n. 1
0
        public static IDbCommand CreateCommand(this IDbProvider dbProvider, string sql, CommandType cmdType = CommandType.Text, Func<IDbCommand, IDbDataParameter[]> getParas = null)
        {
            var conn = dbProvider.CreateConnection();
            if (conn.State != ConnectionState.Open)
                conn.Open();
            var trans = conn.BeginTransaction();
            var cmd = dbProvider.CreateCommand(conn);

            IDbDataParameter[] paras = null;
            if (getParas != null)
                paras = getParas(cmd);

            dbProvider.PrepareCommand(ref cmdType, ref sql, ref paras);
            cmd.CommandType = cmdType;
            cmd.CommandText = sql;

            if (paras != null && paras.Length > 0)
            {
                foreach (var p in paras)
                {
                    dbProvider.AttachParameter(cmd, p);
                }
            }
            cmd.Transaction = trans;
            return cmd;
        }
        /// <summary>
        /// 执行一个DbCommand并返回DataSet
        /// </summary>
        /// <param name="comm"></param>
        /// <returns></returns>
        public static DataSet ExecuteCommand(this DbProviderFactory dbFactory, DbCommand comm, string connectionStringName)
        {
            DbConnection conn = dbFactory.CreateConnection(connectionStringName);
            comm.Connection = conn;
            DbDataAdapter adapter = dbFactory.CreateDataAdapter();
            adapter.SelectCommand = comm;

            try
            {
                DataSet ds = new DataSet();

                adapter.Fill(ds);

                return ds;
            }
            catch (Exception eX)
            {
                throw eX;
            }
            finally
            {
                if (ConnectionState.Open == conn.State)
                    conn.Close();
            }
        }
Esempio n. 3
0
        /// <summary>
        /// MySql Connection을 연결합니다.
        /// </summary>
        /// <param name="db">DAAB MySqlProvider 인스턴스</param>
        /// <param name="tryCount">연결 실패 시, 재 시도 횟수</param>
        /// <returns>새로 연결된 <see cref="MySqlConnection"/>의 인스턴스, 만약 연결에 실패했다면 null을 반환합니다.</returns>
        internal static MySqlConnection OpenConnection(this MySqlDatabase db, int tryCount) {
            if(IsDebugEnabled)
                log.Debug("MySql Database를 연결하려고 합니다...");

            MySqlConnection connection = null;
            var count = 0;
            for(var i = 0; i < tryCount; i++) {
                try {
                    if(IsDebugEnabled)
                        log.Debug("MySqlConnection을 생성하고, 비동기 방식으로 Open합니다. 시도 횟수=[{0}]", ++count);

                    connection = (MySqlConnection)db.CreateConnection();
                    connection.Open();

                    if(connection.State == ConnectionState.Open) {
                        if(IsDebugEnabled)
                            log.Debug("MySqlConnection을 연결했습니다!!!");

                        return connection;
                    }
                }
                catch(Exception ex) {
                    HandleConnectionError(db, ex, count);
                }
            }

            Guard.Assert(connection != null && connection.State != ConnectionState.Closed, "MySql Connection을 열지 못했습니다!!!");
            return connection;
        }
 public static IDbConnection CreateConnection(this DbProviderFactory factory,
     Action<IDbConnection> setup)
 {
     IDbConnection connection = factory.CreateConnection();
     setup(connection);
     return connection;
 }
Esempio n. 5
0
		public static IDbConnection OpenConnection(this DbProviderFactory @this, string connectionString)
		{
			var connection = @this.CreateConnection();
			connection.ConnectionString = connectionString;
			connection.Open();

			return connection;
		}
Esempio n. 6
0
        /// <summary>
        /// 指定されたデータベースに対する接続管理機能を生成します。
        /// </summary>
        /// <param name="dbKind">データーベースの種類</param>
        /// <param name="connectionString">接続文字列</param>
        /// <returns>データーベース接続</returns>
        public static IDbConnection CreateConnection(this DbKind dbKind, string connectionString)
        {
            if (connectionString == null)
                throw new ArgumentNullException(nameof(connectionString));

            var connection = dbKind.CreateConnection();
            connection.ConnectionString = connectionString;
            return connection;
        }
Esempio n. 7
0
	public static DbConnection CreateConnectionWithTrace(this DbProviderFactory factory)
#endif
	{
#if DBTrace
		File.AppendAllText(LogDBTrace, "Creating connection " + new System.Diagnostics.StackTrace().ToString());
#endif
		return factory.CreateConnection();

	}
 public static Lazy<IConnection> GetLazyConnection(this IConnectionFactory connectionFactory)
 {
     return new Lazy<IConnection>(() =>
     {
         IConnection connection = connectionFactory.CreateConnection();
         connection.Start();
         return connection;
     }, LazyThreadSafetyMode.ExecutionAndPublication);
 }
 /// <summary>
 /// 返回实现 System.Data.Common.DbConnection 类的提供程序的类的一个新实例并设置连接字符串。
 /// </summary>
 /// <param name="factory">DbProviderFactory 实例。</param>
 /// <param name="connectionString">用于打开数据库的连接。</param>
 /// <returns>System.Data.Common.DbConnection 的新实例。</returns>
 public static DbConnection CreateConnection(this DbProviderFactory factory, string connectionString)
 {
     DbConnection connection = factory.CreateConnection();
     if (connection != null)
     {
         connection.ConnectionString = connectionString;
     }
     return connection;
 }
        /// <summary>
        /// Extension method to create and open a connection.
        /// </summary>
        /// <param name="factory">Connection factory to create from.</param>
        /// <returns>An open connection.</returns>
        public static IDbConnection CreateOpenConnection(this IDbConnectionFactory factory)
        {
            if (factory == null)
            {
                throw new ArgumentNullException("factory");
            }

            var connection = factory.CreateConnection();
            connection.Open();

            return connection;
        }
Esempio n. 11
0
 public static void ExecuteNonQuery(this DbProviderFactory provider, string connectionString, string command)
 {
     using (DbConnection conn = provider.CreateConnection())
     {
         conn.ConnectionString = connectionString;
         conn.Open();
         using (DbCommand cmd = conn.CreateCommand())
         {
             cmd.CommandText = command;
             cmd.ExecuteNonQuery();
         }
     }
 }
        public static DbConnection CreateConnection(this DbProviderFactory factory
			, string connectionStringName)
        {
            // Ensure we can identify the connection string...
            if (connectionStringName == null) throw new ArgumentNullException("connectionStringName");
            string cs = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
            if (cs == null)
                throw new ArgumentException(String.Format("Connection string not defined: {0}", connectionStringName));

            DbConnection cn = factory.CreateConnection();
            cn.ConnectionString = cs;
            return cn;
        }
Esempio n. 13
0
 public static object ExecuteScalar(this DbProviderFactory provider, string connectionString, string command)
 {
     using (DbConnection conn = provider.CreateConnection())
     {
         conn.ConnectionString = connectionString;
         conn.Open();
         using (DbCommand cmd = conn.CreateCommand())
         {
             cmd.CommandText = command;
             object ret = cmd.ExecuteScalar();
             return ret;
         }
     }
 }
Esempio n. 14
0
        /// <summary>
        /// Oracle 연결이 성공하지 못하는 경우가 많아, 재시도 횟수 만큼 간격을 두고 연결을 시도합니다.
        /// Oracle DB의 Process 수를 기본(40)에서 100 이상으로 늘려주면 연결이 성공할 확률이 높습니다.
        /// </summary>
        /// <param name="db">DAAB OracleProvider 인스턴스</param>
        /// <param name="tryCount">연결 실패 시, 재 시도 횟수</param>
        /// <returns>새로 연결된 <see cref="OracleConnection"/>의 인스턴스, 만약 연결에 실패했다면 null을 반환합니다.</returns>
        public static OracleConnection OpenConnection(this OracleDatabase db, int tryCount) {
            // NOTE: Oracle의 경우 Connection이 연결 안 되는 에러(ORA-12519) 가 자주 발생한다. 그래서, 시간 Time을 두고, 재시도하도록 하였다.
            // HINT: http://forums.oracle.com/forums/thread.jspa?messageID=1145120, 
            // HINT: http://kyeomstar.tistory.com/160

            if(IsDebugEnabled)
                log.Debug("Oracle Database를 연결하려고 합니다...");

            OracleConnection connection = null;

            for(var i = 0; i < tryCount; i++) {
                var count = i + 1;

                try {
                    if(IsDebugEnabled)
                        log.Debug("OracleConnection을 생성하고, 비동기 방식으로 Open합니다. 시도 횟수=[{0}]", (i + 1));

                    connection = (OracleConnection)db.CreateConnection();
                    connection.Open();

                    //Task.Factory.FromAsync(connection.BeginOpen,
                    //                       connection.EndOpen,
                    //                       null)
                    //	.WaitAsync(TimeSpan.FromSeconds(15));

                    if(connection.State == ConnectionState.Open) {
                        if(IsDebugEnabled)
                            log.Debug("OracleConnection을 연결했습니다!!!");

                        return connection;
                    }
                }
                catch(AggregateException age) {
                    age.Handle(ex => {
                                   HandleConnectionError(db, ex, count);
                                   return true;
                               });
                }
                catch(Exception ex) {
                    HandleConnectionError(db, ex, count);
                }
            }

            Guard.Assert(connection != null && connection.State != ConnectionState.Closed, "Oracle Connection을 열지 못했습니다!!!");
            return connection;
        }
Esempio n. 15
0
        public static void ExecuteNonQuery(this DbProviderFactory provider, string connectionString, string command)
        {
            // Connect & Execute cmd..
            using (var conn = provider.CreateConnection())
            {
                conn.ConnectionString = connectionString;

                try
                {
                    conn.Open();
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = command;
                        cmd.ExecuteNonQuery();
                    }
                }
                finally
                {
                    conn.Close();
                }
            }
        }
Esempio n. 16
0
        public static object ExecuteScalar(this DbProviderFactory provider, string connectionString, string command)
        {
            // Connect & Execute cmd..
            using (var conn = provider.CreateConnection())
            {
                conn.ConnectionString = connectionString;

                try
                {
                    conn.Open();
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = command;
                        var ret = cmd.ExecuteScalar();
                        return ret;
                    }
                }
                finally
                {
                    conn.Close();
                }
            }
        }
Esempio n. 17
0
        /// <summary>
        /// MySQL Connection을 연결합니다.
        /// </summary>
        /// <param name="db">DAAB SqlDatabase 인스턴스</param>
        /// <param name="tryCount">연결 실패 시, 재 시도 횟수</param>
        /// <returns>새로 연결된 <see cref="SqlConnection"/>의 인스턴스, 만약 연결에 실패했다면 null을 반환합니다.</returns>
        internal static SqlConnection OpenConnection(this SqlDatabase db, int tryCount = 15) {
            if(IsDebugEnabled)
                log.Debug("SQL Server Database를 연결하려고 합니다...");

            SqlConnection connection = null;

            var count = 0;
            for(var i = 0; i < tryCount; i++) {
                try {
                    if(IsDebugEnabled)
                        log.Debug("SqlConnection을 생성하고, 비동기 방식으로 Open합니다. 시도 횟수=[{0}]", ++count);

                    connection = (SqlConnection)db.CreateConnection();
                    connection.Open();

                    if(connection.State == ConnectionState.Open) {
                        if(IsDebugEnabled)
                            log.Debug("SqlConnection을 연결했습니다!!!");

                        return connection;
                    }
                }
                catch(AggregateException age) {
                    var count1 = count;
                    age.Handle(ex => {
                                   HandleConnectionError(db, ex, count1);
                                   return true;
                               });
                }
                catch(Exception ex) {
                    HandleConnectionError(db, ex, count);
                }
            }

            Guard.Assert(connection != null && connection.State != ConnectionState.Closed, "Connection을 열지 못했습니다!!!");
            return connection;
        }
 public static DbConnection CreateConnection(this DbProviderFactory dbFactory, string connectionStringName)
 {
     DbConnection conn = dbFactory.CreateConnection();
     conn.ConnectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
     return conn;
 }
 public static void CreateConnection(this ICorDebugManagedCallback2 instance, IntPtr pProcess, uint dwConnectionId, IntPtr pConnName)
 {
     instance.CreateConnection(pProcess, dwConnectionId, pConnName);
 }
Esempio n. 20
0
 public static DbConnection CreateSqlServerConnectionForTests_Northwind(this DbProviderFactory factory)
 {
     return factory.CreateConnection(@"Data Source=(localdb)\v11.0; AttachDbFileName=" + Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\..\..\samples\App\bin\Debug\Northwind\Northwind.mdf")) + "; Integrated Security=true; MultipleActiveResultSets=true");
 }
Esempio n. 21
0
 public static DbConnection CreateSqlServerConnectionForTests(this DbProviderFactory factory)
 {
     return factory.CreateConnection(@"Data Source=(localdb)\v11.0;");
 }
 private static IDbConnection GetConnection(this AdoAdapter adapter)
 {
     return adapter.CreateConnection();
 }
        /// <summary>
        /// 执行非查询的DbCommand
        /// </summary>
        /// <param name="comm"></param>
        /// <param name="trans"></param>
        public static void ExecuteNoneQueryCommand(this DbProviderFactory dbFactory, DbCommand comm, DbTransaction trans, string connectionStringName)
        {
            DbConnection conn;
            if (null == trans)
                conn = dbFactory.CreateConnection(connectionStringName);
            else
                conn = trans.Connection;

            comm.Connection = conn;
            if (null != trans)
                comm.Transaction = trans;

            try
            {
                if (ConnectionState.Open != conn.State)
                    conn.Open();

                comm.ExecuteNonQuery();
                if (null == trans)
                    conn.Close();
            }
            catch (Exception eX)
            {
                throw eX;
            }
            finally
            {
                if (null == trans && ConnectionState.Open == conn.State)
                    conn.Close();
            }
        }