Beispiel #1
0
        /// <summary>
        /// 记录 Sql 执行过程。
        /// 
        /// 把 SQL 语句及参数,写到 SQL_TRACE_FILE 配置所对应的文件中。
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parameters"></param>
        /// <param name="connectionSchema"></param>
        public override void LogDbAccessed(string sql, IDbDataParameter[] parameters, DbConnectionSchema connectionSchema)
        {
            if (_sqlTraceFile == null)
            {
                _sqlTraceFile = ConfigurationHelper.GetAppSettingOrDefault("SQL_TRACE_FILE", string.Empty);
            }

            if (_sqlTraceFile.Length > 0)
            {
                var content = sql;

                if (parameters.Length > 0)
                {
                    var pValues = parameters.Select(p =>
                    {
                        var value = p.Value;
                        if (value is string)
                        {
                            value = '"' + value.ToString() + '"';
                        }
                        return value;
                    });
                    content += Environment.NewLine + "Parameters:" + string.Join(",", pValues);
                }

                content = DateTime.Now +
                    //"\r\nDatabase:  " + connectionSchema.Database +
                    "\r\nConnectionString:  " + connectionSchema.ConnectionString +
                    "\r\n" + content + "\r\n\r\n\r\n";

                File.AppendAllText(_sqlTraceFile, content, Encoding.UTF8);
            }
        }
Beispiel #2
0
        public static string GetDataSourceName(DbConnectionSchema schema)
        {
            var match = Regex.Match(schema.ConnectionString, @"Data Source=\s*(?<dataSource>[^;]+)\s*");

            if (!match.Success)
            {
                throw new NotSupportedException("无法解析出此数据库连接字符串中的数据库名:" + schema.ConnectionString);
            }
            var dataSource = match.Groups["dataSource"].Value;

            return(dataSource);
        }
Beispiel #3
0
        /// <summary>
        /// 获取 Oracle 连接中的用户 Id。
        /// </summary>
        /// <param name="schema"></param>
        /// <returns></returns>
        public static string GetOracleUserId(DbConnectionSchema schema)
        {
            var match = Regex.Match(schema.ConnectionString, @"User Id=\s*(?<userId>\w+)\s*");

            if (!match.Success)
            {
                throw new NotSupportedException("无法解析出此数据库连接字符串中的数据库名:" + schema.ConnectionString);
            }
            var userId = match.Groups["userId"].Value;

            return(userId);
        }
Beispiel #4
0
        private void Init(DbConnectionSchema schema, IDbConnection connection = null)
        {
            this._connectionSchema = schema;

            this._factory   = DbConnectorFactory.GetFactory(schema.ProviderName);
            this._converter = DbConnectorFactory.Create(schema.ProviderName);
            if (connection == null)
            {
                this._connection = this._factory.CreateConnection();
                this._connection.ConnectionString = schema.ConnectionString;
                this._connectionCreatedBySelf     = true;
            }
            else
            {
                this._connection = connection;
            }
        }
Beispiel #5
0
 /// <summary>
 /// 记录 Sql 执行过程。
 /// </summary>
 /// <param name="sql"></param>
 /// <param name="parameters"></param>
 /// <param name="connectionSchema"></param>
 public virtual void LogDbAccessed(string sql, IDbDataParameter[] parameters, DbConnectionSchema connectionSchema)
 {
 }
Beispiel #6
0
 /// <summary>
 /// 判断指定的提供程序是否为 Oracle 提供程序。
 /// 目前已知的 Oracle 提供程序有:
 /// System.Data.OracleClient、Oracle.DataAccess.Client、Oracle.ManagedDataAccess.Client
 /// </summary>
 /// <param name="schema">The schema.</param>
 /// <returns></returns>
 public static bool IsOracleProvider(DbConnectionSchema schema)
 {
     return(IsOracleProvider(schema.ProviderName));
 }
Beispiel #7
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="schema">the connection schema.</param>
 /// <param name="dbConnection">use a exsiting connection, rather than to create a new one.</param>
 public DbAccesser(DbConnectionSchema schema, IDbConnection dbConnection)
 {
     this.Init(schema, dbConnection);
 }
Beispiel #8
0
 /// <summary>
 /// Constructor
 ///
 /// this accessor uses schema to find its connection string, and creates connection by itself.
 /// </summary>
 /// <param name="schema">the connection schema.</param>
 public DbAccesser(DbConnectionSchema schema)
 {
     this.Init(schema);
 }
Beispiel #9
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="schema">the connection schema.</param>
 /// <param name="dbConnection">use a exsiting connection, rather than to create a new one.</param>
 public DbAccesser(DbConnectionSchema schema, IDbConnection dbConnection)
 {
     this.Init(schema, dbConnection);
 }
Beispiel #10
0
 /// <summary>
 /// Constructor
 /// 
 /// this accessor uses schema to find its connection string, and creates connection by itself.
 /// </summary>
 /// <param name="schema">the connection schema.</param>
 public DbAccesser(DbConnectionSchema schema)
 {
     this.Init(schema);
 }
Beispiel #11
0
        private void Init(DbConnectionSchema schema, IDbConnection connection = null)
        {
            this._connectionSchema = schema;

            this._factory = ConverterFactory.GetFactory(schema.ProviderName);
            this._converter = ConverterFactory.Create(schema.ProviderName);
            if (connection == null)
            {
                this._connection = this._factory.CreateConnection();
                this._connection.ConnectionString = schema.ConnectionString;
                this._connectionCreatedBySelf = true;
            }
            else
            {
                this._connection = connection;
            }
        }
Beispiel #12
0
 public DbAccessedEventArgs(string sql, IDbDataParameter[] parameters, DbConnectionSchema connectionSchema)
 {
     this.Sql = sql;
     this.Parameters = parameters;
     this.ConnectionSchema = connectionSchema;
 }
Beispiel #13
0
        /// <summary>
        /// 记录 Sql 执行过程。
        /// </summary>
        /// <param name="sql">The SQL.</param>
        /// <param name="parameters">The parameters.</param>
        /// <param name="connectionSchema">The connection schema.</param>
        public static void LogDbAccessed(string sql, IDbDataParameter[] parameters, DbConnectionSchema connectionSchema)
        {
            _dbAccessedCount++;
            _threadDbAccessedCount++;

            lock (_lock)
            {
                try
                {
                    _impl.LogDbAccessed(sql, parameters, connectionSchema);
                }
                catch { }
            }

            if (EnableSqlObervation)
            {
                var handler1 = _threadDbAccessedHandler;
                var handler2 = DbAccessed;
                if (handler1 != null || handler2 != null)
                {
                    var args = new DbAccessedEventArgs(sql, parameters, connectionSchema);

                    if (handler1 != null)
                    {
                        handler1(null, new DbAccessedEventArgs(sql, parameters, connectionSchema));
                    }
                    if (handler2 != null)
                    {
                        handler2(null, new DbAccessedEventArgs(sql, parameters, connectionSchema));
                    }
                }
            }
        }
Beispiel #14
0
 /// <summary>
 /// 判断指定的提供程序是否为 Oracle 提供程序。
 /// 目前已知的 Oracle 提供程序有:
 /// System.Data.OracleClient、Oracle.DataAccess.Client、Oracle.ManagedDataAccess.Client
 /// </summary>
 /// <param name="schema">The schema.</param>
 /// <returns></returns>
 public static bool IsOracleProvider(DbConnectionSchema schema)
 {
     return IsOracleProvider(schema.ProviderName);
 }