コード例 #1
0
 public static bool ForFirst(this SqlQuery query, IDbConnection connection,
                             ReaderCallBack callBack)
 {
     using IDataReader reader = SqlHelper.ExecuteReader(connection, query);
     if (reader.Read())
     {
         query.GetFromReader(reader);
         callBack(reader);
         return(true);
     }
     else
     {
         return(false);
     }
 }
コード例 #2
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);
        }