使用未返回结果的参数化查询时超时.只有在这种情况下



我们正在尝试对一些DB服务器超时进行故障排除,我能够将其减少到以下情况:

SqlConnection con = new SqlConnection("*connectionstring*");
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
var sql = "select top 10 a.id from idx a inner join docs b on a.id=b.id " +
    "where b.status in ('X','Y','Z') and a.sc=@SC and a.name like @Name " +
    "order by a.id";
cmd.CommandText = sql;
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@SC","NC");
cmd.Parameters.AddWithValue("@Name","%ZZZ%");
DateTime before = DateTime.Now;
using (SqlDataReader r = cmd.ExecuteReader()) {
  while (r.Read()) {
  }
}
DateTime after = DateTime.Now;
Console.WriteLine("Before: " + before.ToString());
Console.WriteLine("After:  " + after.ToString());
Console.WriteLine(after - before);
con.Close();

上述在ExecuteReader语句中超时。

如果我将参数值"%ZZZ%"更改为"%SMITH%",它几乎会立即返回。更好的是,如果我删除命令参数并将CommandText语法更改为纯sql,即"…其中sc='NC'和name like'%ZZZ%'",它也会立即返回。

有什么想法吗?我不知所措,找不到任何其他有人遇到类似问题的线索。提前感谢!

**更新#1:我们能够用一个小型Java控制台应用程序复制相同的功能,所以这似乎不是.Net或驱动程序的问题。

**更新#2:这是一个与这里提出的问题非常相似的问题。原因不完全相同,但效果完全相同。

我建议您尝试使用Sql server Profiler来评测服务器查询。你可能会从中得到一些线索。

相关内容

  • 没有找到相关文章

最新更新