コード例 #1
0
        /// <summary>
        /// 通过实例,查询数据
        /// </summary>
        /// <typeparam name="T">需要返回数据类型</typeparam>
        /// <param name="connection">对IDbConnection扩展</param>
        /// <param name="commandText">SQL语句</param>
        /// <param name="value">映射到SQL语句的实例</param>
        /// <returns>T类型数据集合</returns>
        public static IEnumerable<T> QueryByInstance<T>(this IDbConnection connection, string commandText, object value)
        {
            //Stopwatch watch = new Stopwatch();
            List<T> resultCollection = null;
            IDataReader reader = null;
            SqlDelegate<T>.GetReaderInstance instance_func = null;
            SqlDelegate<T>.GetCommandByInstance command_func = SqlDynamicCache.GetInstanceCommandDelegate<T>(commandText, value);
            IDbCommand command = connection.CreateCommand();
            command_func(ref command, value);

            bool CloseFlag =( connection.State == ConnectionState.Closed );
            try
            {
                if (CloseFlag){ connection.Open();}
                reader = command.ExecuteReader(CommandBehavior.CloseConnection| CommandBehavior.SequentialAccess | CommandBehavior.SingleResult);
                CloseFlag = false;
                instance_func = SqlDynamicCache.GetReaderDelegate<T>(reader, commandText);
                resultCollection = new List<T>(reader.FieldCount);
                while (reader.Read())
                {
                    //watch.Restart();
                    //T t = instance_func(reader);
                    //watch.Stop();
                   // System.Console.WriteLine("执行Reader缓存:" + watch.Elapsed);
                    resultCollection.Add(instance_func(reader));
                }
                while (reader.NextResul }
                reader.Dispose();
                reader = null;
                return resultCollection;
            }
コード例 #2
0
ファイル: DBConnect.cs プロジェクト: windygu/hispeed
 public void Retrieval(string query, SqlDelegate pFunc)
 {
     lock (_obj)
     {
         if (OpenConnection() == true)
         {
             try
             {
                 MySqlCommand    cmd        = new MySqlCommand(query, connection);
                 MySqlDataReader dataReader = cmd.ExecuteReader();
                 pFunc(dataReader);
                 dataReader.Close();
             }
             catch (MySqlException ex)
             {
                 ExceptionCatch(ex);
             }
             finally
             {
                 if (this.ConnOpend())
                 {
                     this.CloseConnection();
                 }
             }
         }
     }
 }
コード例 #3
0
        public static IEnumerable <T> QueryByObjects <T>(this IDbConnection connection, string commandText, params object[] values)
        {
            List <T> resultCollection = null;

            SqlDelegate <T> .GetReaderInstance  instance_func = null;
            SqlDelegate <T> .GetCommandByObject command_func  = SqlDynamicCache.GetObjectsCommandDelegate <T>(commandText, values);
            IDbCommand command = connection.CreateCommand();

            command_func(ref command, values);
            bool        CloseFlag = (connection.State == ConnectionState.Closed);
            IDataReader reader    = null;

            try
            {
                if (CloseFlag)
                {
                    connection.Open();
                }
                reader           = command.ExecuteReader(CommandBehavior.CloseConnection | CommandBehavior.SequentialAccess | CommandBehavior.SingleResult);
                CloseFlag        = false;
                instance_func    = SqlDynamicCache.GetReaderDelegate <T>(reader, commandText);
                resultCollection = new List <T>(reader.FieldCount);
                while (reader.Read())
                {
                    T tNode = instance_func(reader);
                    resultCollection.Add(tNode);
                }
                while (reader.NextResult())
                {
                }
                reader.Dispose();
                reader = null;
                return(resultCollection);
            }
            finally
            {
                if (reader != null)
                {
                    if (!reader.IsClosed)
                    {
                        try { command.Cancel(); }
                        catch { }
                    }
                    reader.Dispose();
                }

                if (CloseFlag)
                {
                    connection.Close();
                }
                command?.Dispose();
            }
        }
コード例 #4
0
        /// <summary>
        /// 通过多个实例查询满足条件的数据
        /// </summary>
        /// <typeparam name="T">需要返回数据的类型</typeparam>
        /// <param name="connection">对IDbConnection扩展</param>
        /// <param name="commandText">SQL语句</param>
        /// <param name="values">映射到SQL语句的实例数组</param>
        /// <returns>T类型集合</returns>
        public static IEnumerable<T> QueryByInstances<T>(this IDbConnection connection, string commandText, object[] values)
        {

            List<T> resultCollection = new List<T>();
            SqlDelegate<T>.GetReaderInstance instance_func = null;
            SqlDelegate<T>.GetCommandByInstance command_func = SqlDynamicCache.GetInstanceCommandDelegate<T>(commandText, values[0]);
            int i_length = values.Length;
            IDbCommand command = connection.CreateCommand();
            IDataReader reader = null;
            bool CloseFlag = (connection.State == ConnectionState.Closed);
            try
            {
                if (CloseFlag) { connection.Open(); }
                for (int i = 0; i < i_length; i += 1)
                {
                    command_func(ref command, values[i]);
                    reader = command.ExecuteReader(CommandBehavior.CloseConnection | CommandBehavior.SequentialAccess | CommandBehavior.SingleResult);
                    CloseFlag = false;
                    if (instance_func == null)
                    {
                        instance_func = SqlDynamicCache.GetReaderDelegate<T>(reader, commandText);
                    }
                    while (reader.Read())
                    {
                        T tNode = instance_func(reader);
                        resultCollection.Add(tNode);
                    }
                    while (reader.NextResult()) { }
                    reader.Dispose();
                    reader = null;
                }
                return resultCollection;
            }
            finally
            {
                if (reader != null)
                {
                    if (!reader.IsClosed)
                    {
                        try { command.Cancel(); }
                        catch { }
                    }
                    reader.Dispose();
                }

                if (CloseFlag) connection.Close();
                command?.Dispose();
            }
        }
コード例 #5
0
        public static object ExecuteScalarByObject <T>(this IDbConnection connection, string commandText, params object[] values)
        {
            SqlDelegate <ENull> .GetCommandByObject command_func = SqlDynamicCache.GetObjectsCommandDelegate <ENull>(commandText, values);
            IDbCommand command   = connection.CreateCommand();
            bool       CloseFlag = (connection.State == ConnectionState.Closed);

            try
            {
                if (CloseFlag)
                {
                    connection.Open();
                }
                command_func(ref command, values);
                return(command.ExecuteScalar());
            }
            finally
            {
                connection.Close();
                command?.Dispose();
            }
        }