运行查询之前的记录计数-C#

本文关键字:-C# 记录 查询 运行 | 更新日期: 2023-09-27 18:07:54

全部,

我需要一些帮助。我一直在构建一个windows窗体应用程序,它根据选择的组单选框条目执行一些sql查询。当它运行一个大集合时,我注意到一些"缓慢",所以我想1(提示用户,2(警告他们以下计数。

这是我的东西。任何改进建议:

if(rdbDate.Checked)
        {
            SqlDataAdapter adapter = new SqlDataAdapter("select * from TABLE where ORDER_DATE between @mindate and @maxdate", myConnection);
            adapter.SelectCommand.Parameters.AddWithValue("@mindate", dtFromDate.Value.Date);
            adapter.SelectCommand.Parameters.AddWithValue("@maxdate", dtToDate.Value.Date);

            DataTable t = new DataTable();
            adapter.Fill(t);
            if(t.Rows.Count>10000)
            {
                DialogResult msgresult = MessageBox.Show("Warning your query returned " 
                    + t.Rows.Count + 
                    " are you sure you want to continue?", 
                    "Question", 
                    MessageBoxButtons.YesNo, 
                    MessageBoxIcon.Question);
                if (msgresult == DialogResult.No)
                {
                    return;
                }
            }
            dataGridView1.DataSource = t;
        }

我需要为每个单选按钮重复此操作。我还认为是执行查询来获取计数吗?如果可能的话,我更愿意进行选择计数(*(,然后运行查询?

提前感谢

Xathras

运行查询之前的记录计数-C#

获取记录数并提示用户:

if(rdbDate.Checked)
{
    int numberOfRecords;
    using (SqlCommand cmd = new SqlCommand("select count(*) from TABLE where ORDER_DATE between @mindate and @maxdate", myConnection)
    {
        cmd.Parameters.AddWithValue("@mindate", dtFromDate.Value.Date);
        cmd.Parameters.AddWithValue("@maxdate", dtToDate.Value.Date);
        numberOfRecords = cmd.ExecuteScalar();
    }
    if(numberOfRecords >10000)
    {
        DialogResult msgresult = MessageBox.Show("Warning your query returned " 
            + t.Rows.Count + 
            " are you sure you want to continue?", 
            "Question", 
            MessageBoxButtons.YesNo, 
            MessageBoxIcon.Question);
        if (msgresult == DialogResult.No)
        {
            return;
        }
     }
    SqlDataAdapter adapter = new SqlDataAdapter("select * from TABLE where ORDER_DATE between @mindate and @maxdate", myConnection);
    adapter.SelectCommand.Parameters.AddWithValue("@mindate", dtFromDate.Value.Date);
    adapter.SelectCommand.Parameters.AddWithValue("@maxdate", dtToDate.Value.Date);

    DataTable t = new DataTable();
    adapter.Fill(t);
}

由于行计数不是在填充数据集的可序列化事务内部执行的,因此可以想象,记录计数可能与数据集中的行数不同——例如,如果同时插入数据。但是,如果用例将其视为批处理操作,那么这可能不是您需要编码的内容。