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

时间:2014-06-09 02:14:41

标签: c# sql

所有

我需要一些帮助。我有一个我一直在构建的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

1 个答案:

答案 0 :(得分:0)

获取记录数并提示用户:

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);
}

由于在填充数据集的情况下不会在可序列化事务中执行行计数,因此可以想象记录计数可能与数据集中的行数不同 - 如果数据插入到数据集中例如,同一时间。但是,如果用例将此视为批处理操作,则可能不需要编写代码。