using Apewer;
using System;
using System.Collections.Generic;
using System.Data;

namespace Apewer.Source
{

    /// <summary>查询数据表。</summary>
    public interface IQuery : IDisposable
    {

        #region 结果集的属性。

        /// <summary>语句执行成功。</summary>
        bool Success { get; }

        /// <summary>错误信息。</summary>
        string Error { get; }

        /// <summary>消息。</summary>
        string Message { get; }

        /// <summary>语句执行失败时的 Exception 对象。</summary>
        Exception Exception { get; }

        /// <summary>所有结果表。</summary>
        List<DataTable> Tables { get; }

        /// <summary>获取默认结果表。如果设置默认结果表,会丢失设置前的所有结果表。</summary>
        DataTable Table { get; }

        /// <summary>结果集为空。</summary>
        bool Empty { get; }

        /// <summary>默认表中的数据总行数。</summary>
        int Rows { get; }

        /// <summary>默认表中的数据总列数。</summary>
        int Columns { get; }

        #endregion

        #region 以对象获取结果集中的内容。

        /// <summary>获取默认表中第 0 行、第 0 列的单元格内容。</summary>
        object Value();

        /// <summary>获取默认表中指定行中第 0 列的内容。</summary>
        /// <param name="rowIndex">行索引,从 0 开始。</param>
        object Value(int rowIndex);

        /// <summary>获取默认表中第 0 行指定列的内容。</summary>
        /// <param name="columnName">列名称。</param>
        object Value(string columnName);

        /// <summary>获取默认表中指定单元的内容。</summary>
        /// <param name="rowIndex">行索引,从 0 开始。</param>
        /// <param name="columnIndex">列索引,从 0 开始。</param>
        object Value(int rowIndex, int columnIndex);

        /// <summary>获取默认表中指定单元的内容。</summary>
        /// <param name="rowIndex">行索引,从 0 开始。</param>
        /// <param name="columnName">列名称。</param>
        object Value(int rowIndex, string columnName);

        #endregion

        #region 以文本获取结果集中的内容。

        /// <summary>获取默认表中第 0 行、第 0 列的单元格内容。</summary>
        string Text();

        /// <summary>获取默认表中指定行中第 0 列的内容。</summary>
        /// <param name="rowIndex">行索引,从 0 开始。</param>
        string Text(int rowIndex);

        /// <summary>获取默认表中第 0 行指定列的内容。</summary>
        /// <param name="columnName">列名称。</param>
        string Text(string columnName);

        /// <summary>获取默认表中指定单元格的内容。</summary>
        /// <param name="rowIndex">行索引,从 0 开始。</param>
        /// <param name="columnIndex">列索引,从 0 开始。</param>
        string Text(int rowIndex, int columnIndex);

        /// <summary>获取默认表中指定单元的内容。</summary>
        /// <param name="rowIndex">行索引,从 0 开始。</param>
        /// <param name="columnName">列名称。</param>
        string Text(int rowIndex, string columnName);

        #endregion

    }

}