【发布时间】:2019-04-24 10:24:46
【问题描述】:
我有一个小程序,可以让学生测试他们在 ASP.Net 中构建并使用 SQL Server 数据库的 SQL 查询。问题是某些查询“挂起”控制台和 SQL Server。考虑到这一点,我想将执行时间限制为 10 秒或抛出异常。
现在代码看起来像这样:
SqlCommand cmd = new SqlCommand();
cmd.CommandText = TextBox1.Text; //Their query
cmd.CommandType = CommandType.Text;
cmd.CommandTimeout = 1;
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
try
{
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
int count = GridView1.Rows.Count;
Label1.Text = count.ToString() + " Rows";
}
catch (Exception ex)
{
Label1.Text = ex.Message;
GridView1.DataSource = null;
GridView1.DataBind();
}
finally
{
sqlConnection1.Close();
}
CommandtTimeout 不适合我,因为问题通常是查询不断流式传输行(主要是由于笛卡尔积运算)。
有没有办法在不遍历每一行的情况下停止查询中间执行?
【问题讨论】:
-
我希望你真的信任你的用户。这不仅仅是普通的 SQL 注入,而是显式的 SQL 注入。你看过
SqlConnection.ConnectionTimeout吗? -
这是在运行训练数据库的虚拟机上,用户只能执行选择语句。
SqlConnection.ConnectionTimeout没有解决问题,因为他们尝试笛卡尔积查询并且 SQL Server 提供行。缓慢但肯定地。 -
请注意,ASP 不同于 ASP.Net。
标签: c# asp.net sql-server