【发布时间】:2009-11-05 17:05:53
【问题描述】:
我有一个很长的 SQL 查询,它会执行一些插入、更新和删除操作。每个查询使用相同的 2 个参数。如果我从 C# 将它们作为 SQL 参数传递,它会在 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 次。
【问题讨论】:
-
您可能想向我们展示您的 c# 代码
-
发布一些来源。如果查询在超时之前未显示在分析器中,则表示它没有被提交。
-
您应该检查您是否在分析器中只获得了 SQL Stmt Completed,或者您是否也获得了 SQL Stmt Started。
-
您说您正在连续执行许多插入、更新、删除操作……命令准备有时会咬您一口。您是重复使用相同的命令对象还是每次都创建一个新的命令对象?如果您在执行一堆命令的命令中包含相同的 SQL,则可以节省时间来保留命令对象直到您完成。
-
旁注:如果您使用的是 SQL Server 2008,请考虑使用 Merge 语句和表值参数。当基于批量客户端更改更新/插入/删除单个表的大量记录时,这可以清理您的代码。
标签: c# .net sql-server parameters