C# 内联参数化查询超时

C# 内联参数化查询超时,c#,sql,.net,sql-server,vb.net,C#,Sql,.net,Sql Server,Vb.net,我有一个内联参数化查询,它最近开始超时 Dim dal As New DalMain() Dim sbSql As New StringBuilder() sbSql.Append(" select column1, column2 ") sbSql.Append(" from table ") sbSql.Append(" where column3 = @Value ") dal.AddSqlParms("@Value", DalMain.SqlParmType.STR, "100")

我有一个内联参数化查询,它最近开始超时

Dim dal As New DalMain()

Dim sbSql As New StringBuilder()
sbSql.Append(" select column1, column2 ")
sbSql.Append(" from table ")
sbSql.Append(" where column3 = @Value ")

dal.AddSqlParms("@Value", DalMain.SqlParmType.STR, "100")
其中,DalMain是数据访问类,DalMain.SqlParmType.STR是DbType.String类型。在过去的5年里,这个查询一直运行良好,现在我运行它的时候已经超时了

同样的查询在sql management studio中运行良好。如果我硬编码的值如下,那么它运行良好,没有超时

sbSql.Append(" select column1, column2 ")
sbSql.Append(" from table ")
sbSql.Append(" where column3 = '100' ")

问题只发生在那个特定的表上,其余的参数化查询工作正常。非常感谢您的帮助。

数据库上的数据类型是nchar/nvarchar吗?如果数据库上的数据类型为varchar,并且提供的参数声明为nvarchar(反之亦然),SQL server通常不使用索引。检查sql事件探查器中生成的内容以确保

听起来像是参数嗅探-尝试创建存储过程而不是使用动态sql。重新启动sql server是否可以解决此问题?除了编写新的存储过程之外,还有其他解决方案吗?为什么要使用动态sql而不是存储过程?SP通常效率更高,可以防止SQL注入,并且更易于维护。@Dave.Gugg参数化查询可以防止SQL注入。还有SP=更多维护。我感觉在您的实际查询中还有一些您没有在这里显示的东西。而且,我们也不知道在您的
DalMain
中发生了什么。将sql server事件探查器放在上面-查看执行sql的样子,并将其发布到此处。您是对的。我的列是varchar,我使用dbtype作为字符串,该字符串被转换为nvarchar。因此,它没有使用索引来运行查询。但有趣的是,它在过去的3-4年中运行良好,表中有大约3000万条记录。我尝试使用dbtype作为ansisting,现在运行良好。