示例#1
0
        public static int ForEach(this SqlQuery query, IDbConnection connection,
                                  ReaderCallBack callBack)
        {
            int count = 0;

            if (connection.GetDialect().MultipleResultsets)
            {
                using (IDataReader reader = SqlHelper.ExecuteReader(connection, query))
                {
                    while (reader.Read())
                    {
                        query.GetFromReader(reader);
                        callBack(reader);
                    }

                    if (query.CountRecords && reader.NextResult() && reader.Read())
                    {
                        return(Convert.ToInt32(reader.GetValue(0)));
                    }
                }
            }
            else
            {
                string[] queries = query.ToString().Split(new string[] { "\n---\n" }, StringSplitOptions.RemoveEmptyEntries);
                if (queries.Length > 1)
                {
                    count = Convert.ToInt32(SqlHelper.ExecuteScalar(connection, queries[1], query.Params));
                }

                using (IDataReader reader = SqlHelper.ExecuteReader(connection, queries[0], query.Params))
                {
                    while (reader.Read())
                    {
                        query.GetFromReader(reader);
                        callBack(reader);
                    }
                }
            }

            return(count);
        }
示例#2
0
 public static bool GetFirst(this SqlQuery query, IDbConnection connection)
 {
     using IDataReader reader = SqlHelper.ExecuteReader(connection, query);
     if (reader.Read())
     {
         query.GetFromReader(reader);
         return(true);
     }
     else
     {
         return(false);
     }
 }
示例#3
0
 public static bool GetFirst(this SqlQuery query, IDbConnection connection, IEntity row, Dictionary param)
 {
     using IDataReader reader = SqlHelper.ExecuteReader(connection, query, param);
     if (reader.Read())
     {
         query.GetFromReader(reader, new IEntity[] { row });
         return(true);
     }
     else
     {
         return(false);
     }
 }
示例#4
0
 /// <summary>
 ///   <see cref="SqlQuery"/> nesnesinin içerdiği sorguyu bağlantı üzerinde çalıştırır ve
 ///   varsa sorgunun döndürdüğü ilk kaydı yükler.</summary>
 /// <remarks>
 ///   <p>Bu bir extension metodu olduğundan direk <c>query.ForFirst(connection)</c>
 ///   şeklinde de çalıştırılabilir.</p>
 ///   <p><c>query.GetFromReader(reader)</c> işlemi ilk satır için çalıştırılır.</p>
 ///   <p>Eğer <see cref="SqlQuery.CacheTimeOut(int)"/> ile sorgu için saniye cinsinden bir önbellekleme
 ///   süresi belirlenmişse bu değer kullanılır.</p></remarks>
 /// <param name="connection">
 ///   Sorgunun çalıştırılacağı bağlantı. Gerekirse otomatik olarak açılır.</param>
 /// <param name="query">
 ///   Sorguyu içeren <see cref="SqlQuery"/> nesnesi.</param>
 /// <returns>
 ///   Eğer en azından bir sonuç alındıysa <c>true</c></returns>
 public static bool GetFirst(this SqlQuery query, IDbConnection connection, Row row, Dictionary param)
 {
     using (IDataReader reader = ExecuteReader(connection, query, param))
     {
         if (reader.Read())
         {
             query.GetFromReader(reader, new Row[] { row });
             return(true);
         }
         else
         {
             return(false);
         }
     }
 }
示例#5
0
 public static bool ForFirst(this SqlQuery query, IDbConnection connection,
                             Action callBack)
 {
     using (IDataReader reader = SqlHelper.ExecuteReader(connection, query))
     {
         if (reader.Read())
         {
             query.GetFromReader(reader);
             callBack();
             return(true);
         }
         else
         {
             return(false);
         }
     }
 }
示例#6
0
        public static bool GetSingle(this SqlQuery query, IDbConnection connection, IRow row, Dictionary param)
        {
            using IDataReader reader = SqlHelper.ExecuteReader(connection, query, param);
            if (reader.Read())
            {
                query.GetFromReader(reader, new IRow[] { row });

                if (reader.Read())
                {
                    throw new InvalidOperationException("Query returned more than one result!");
                }

                return(true);
            }
            else
            {
                return(false);
            }
        }
示例#7
0
        /// <summary>
        ///   <see cref="SqlQuery"/> nesnesinin içerdiği sorguyu bağlantı üzerinde çalıştırır ve
        ///   varsa sorgunun döndürdüğü ilk kaydı yükler.</summary>
        /// <remarks>
        ///   <p>Bu bir extension metodu olduğundan direk <c>query.ForFirst(connection)</c>
        ///   şeklinde de çalıştırılabilir.</p>
        ///   <p><c>query.GetFromReader(reader)</c> işlemi ilk satır için çalıştırılır.</p>
        ///   <p>Eğer <see cref="SqlQuery.CacheTimeOut(int)"/> ile sorgu için saniye cinsinden bir önbellekleme
        ///   süresi belirlenmişse bu değer kullanılır.</p></remarks>
        /// <param name="connection">
        ///   Sorgunun çalıştırılacağı bağlantı. Gerekirse otomatik olarak açılır.</param>
        /// <param name="query">
        ///   Sorguyu içeren <see cref="SqlQuery"/> nesnesi.</param>
        /// <returns>
        ///   Eğer en azından bir sonuç alındıysa <c>true</c></returns>
        public static bool GetSingle(this SqlQuery query, IDbConnection connection)
        {
            using (IDataReader reader = ExecuteReader(connection, query))
            {
                if (reader.Read())
                {
                    query.GetFromReader(reader);

                    if (reader.Read())
                    {
                        throw new InvalidOperationException("Query returned more than one result!");
                    }

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }