C#、sp#U executesql和不正确的语法
我正在调用下面的代码 在行(IDataReader dr=cmd.ExecuteReader())上,sql barfs在“CompanyUpdate”附近的语法不正确 我查看了sqlprofiler并注意到以下内容:C#、sp#U executesql和不正确的语法,c#,sql-server,sql-server-2005,visual-studio-2005,sql-server-profiler,C#,Sql Server,Sql Server 2005,Visual Studio 2005,Sql Server Profiler,我正在调用下面的代码 在行(IDataReader dr=cmd.ExecuteReader())上,sql barfs在“CompanyUpdate”附近的语法不正确 我查看了sqlprofiler并注意到以下内容: exec sp_executesql N'CompanyUpdate',N'@CompanyID int,@Description varchar(50)',@CompanyID=56,@Description='APC' 它用sp_executesql包装了我的命令。我的所有
exec sp_executesql N'CompanyUpdate',N'@CompanyID int,@Description varchar(50)',@CompanyID=56,@Description='APC'
它用sp_executesql包装了我的命令。我的所有其他sql命令都是在没有问题的情况下执行的
所以我的问题有两个:
1.为什么要使用sp_executesql?
2.我做错了什么
详细信息:sql2005、c#、vs2005我注意到您没有将CommandType设置为StoredProcedure。。。我不知道这是否是你问题的原因:
cmd.CommandType = CommandType.StoredProcedure;
我自己做过很多次,我都数不清了
下次抛出异常时触发内存的提示:
在运行应用程序时打开SQL查询探查器。当每个命令执行时,它显示在服务器端生成并运行的SQL。如果生成的SQL以
sp_executesql
开头,然后是您的查询,则它将作为常规查询运行,即cmd.CommandType=CommandType.Text
,如果它以exec
开头,则很可能作为存储过程运行。请确保为您尝试运行的查询类型生成了正确的SQL。Argh,谢谢。如果你在SqlCommand中添加参数,而不将其设置为StoredProcedure,那么它到底为什么不会出错呢?因为你也可以参数化查询,所以它不是一个存储过程,以便能够添加参数的要求…+1我只是做了同样愚蠢的事情,忘记设置它。
cmd.CommandType = CommandType.StoredProcedure;