所有
我需要一些帮助。我有一个我一直在构建的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
答案 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);
}
由于在填充数据集的情况下不会在可序列化事务中执行行计数,因此可以想象记录计数可能与数据集中的行数不同 - 如果数据插入到数据集中例如,同一时间。但是,如果用例将此视为批处理操作,则可能不需要编写代码。