C# 参数导致sql查询超时

C# 参数导致sql查询超时,c#,.net,sql-server,parameters,C#,.net,Sql Server,Parameters,我有一个很长的SQL查询,它执行一些插入、更新,然后删除。每个查询使用相同的2个参数。如果我将它们作为SQL参数从C#传入,它将在20分钟后超时。我只是把参数放到命令文本中,它就工作了。当我将它与参数一起使用时,它甚至不会显示在分析器中,直到它超时。我错过什么了吗 SqlCommand comm = new SqlCommand(cmdText, conn); comm.CommandTimeout = 5 * 60; SqlParameter p = new SqlParameter("@

我有一个很长的SQL查询,它执行一些插入、更新,然后删除。每个查询使用相同的2个参数。如果我将它们作为SQL参数从C#传入,它将在20分钟后超时。我只是把参数放到命令文本中,它就工作了。当我将它与参数一起使用时,它甚至不会显示在分析器中,直到它超时。我错过什么了吗

SqlCommand comm = new SqlCommand(cmdText, conn); 
comm.CommandTimeout = 5 * 60; 
SqlParameter p = new SqlParameter("@key1", SqlDbType.Int);
p.Value = key1;
comm.Parameters.Add(p);
p = new SqlParameter("@key2", SqlDbType.Int);
p.Value = 1000000;
comm.Parameters.Add(p);
comm.ExecuteNonQuery();

如果取出参数代码,并在执行查询之前仅替换cmdText,则它将正常工作。查询本身大约有300行。每个参数使用51次。

在ExecuteOnQuery()之前,可能缺少comm.Prepare()调用

密钥在SQL命令中,而不是在SQL命令后说“cmdText”


编辑:您也没有在代码中指定参数方向,这可能很重要。

您是否设置了命令类型

var command = new SqlCommand() { CommandType = CommandType.StoredProcedure };

您可能想向我们展示您的c#代码,并发布一些源代码。如果查询直到超时才显示在探查器中,则不会提交该查询。您应该检查是在探查器中仅完成SQL Stmt,还是同时启动SQL Stmt。您说您正在一行中执行大量插入、更新、删除操作。。。命令准备有时会伤害你。您是重复使用同一个命令对象还是每次都创建一个新的命令对象?如果您在一个命令中执行了一组相同的SQL,则可以节省时间来保留命令对象,直到完成为止。旁注:如果您使用的是SQL Server 2008,请考虑使用Merge语句和表值参数。在基于大量客户端更改更新/插入/删除单个表的大量记录时,这可以大大清理代码。