Beispiel #1
0
        /// <summary>
        /// 从<see cref="IDataRecord"/>序列(一般是<see cref="DbDataReader"/>)中读取1行。
        /// 若序列仅有一行,返回true;否则返回false。
        /// <paramref name="rows"/>读取后将被关闭(Dispose)。
        /// </summary>
        /// <param name="rows">结果集。</param>
        /// <param name="result">读取到的行,方法返回false时为null。</param>
        /// <param name="rowCount">
        /// 读取到的行数,只有三个值:
        /// 0 - 没有读取到记录;
        /// 1 - 读取到了唯一的一行;
        /// 2 - 读取到了第二行,此时终止读取过程并返回false。
        /// </param>
        /// <returns>若序列仅有一行,返回true;否则返回false。</returns>
        public static bool TryReadUniqueRow(IEnumerable <IDataRecord> rows, out IDataRecord result, out int rowCount)
        {
            result   = null;
            rowCount = 0;

            using (var enumerator = rows.GetEnumerator())
            {
                if (enumerator.MoveNext())
                {
                    rowCount++;

                    // rows使用 DataReader,迭代完后,reader就关掉了,
                    // 为了使这行记录还可以使用,需要将reader的数据保存下来。
                    result = new SingleRowKeeper(enumerator.Current);
                }

                // 只能有一行!
                if (!enumerator.MoveNext())
                {
                    return(true);
                }

                // 多于1行,返回false
                rowCount++;
                result = null;
                return(false);
            }
        }
Beispiel #2
0
        /// <summary>
        /// <see cref="IDataReader"/>中读取1行。
        /// 若序列仅有一行,返回true;否则返回false。
        /// <paramref name="reader"/>读取后 *不会* 被关闭(Close)。
        /// </summary>
        /// <param name="reader">结果集。</param>
        /// <param name="result">读取到的行,方法返回false时为null。</param>
        /// <param name="rowCount">
        /// 读取到的行数,只有三个值:
        /// 0 - 没有读取到记录;
        /// 1 - 读取到了唯一的一行;
        /// 2 - 读取到了第二行,此时终止读取过程并返回false。
        /// </param>
        /// <returns>若序列仅有一行,返回true;否则返回false。</returns>
        public static bool TryReadUniqueRow(IDataReader reader, out IDataRecord result, out int rowCount)
        {
            result   = null;
            rowCount = 0;

            if (reader.Read())
            {
                rowCount++;

                // 持久化此记录
                result = new SingleRowKeeper(reader);
            }

            // 只能有一行!
            if (!reader.Read())
            {
                return(true);
            }

            // 多于1行,返回false
            rowCount++;
            result = null;
            return(false);
        }