C# Webmatrix QueryValue调用引发SQLException“0附近的语法不正确”

C# Webmatrix QueryValue调用引发SQLException“0附近的语法不正确”,c#,tsql,webmatrix,C#,Tsql,Webmatrix,以下方法查找IMEI代码的Id 它调用的sp设置为返回单个值。在SMO中运行时,该过程工作正常。给它一个IMEI字符串,如果它在表中,它将返回vehicleId。如果不是,则返回0 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 - ============================================= -作者:*特里姆* -创建日期:2017-05-12 -描述:返回与IMEI关联的VehicleId - =========================

以下方法查找IMEI代码的Id

它调用的sp设置为返回单个值。在SMO中运行时,该过程工作正常。给它一个IMEI字符串,如果它在表中,它将返回vehicleId。如果不是,则返回0

将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 - ============================================= -作者:*特里姆* -创建日期:2017-05-12 -描述:返回与IMEI关联的VehicleId - ============================================= 更改程序[dbo]。[sp\u标量\u车辆ID\u用于\u IMEI] @伊梅瓦查尔20 像 开始 -已添加SET NOCOUNT以防止额外的结果集丢失 -干扰SELECT语句。 不计数; 声明@VehicleId int 选择@VehicleId=v.VehicleId 来自车辆v 其中v.TabletIMEI=@IMEI -查询中的ISNULL无效 如果@VehicleId为空 开始 设置@VehicleId=0 终止 选择@VehicleId 终止 从代码运行时,该过程将抛出System.Data.SqlClient.SqlException:靠近“0”的语法不正确。它是在我删除ISNULL检查之前抛出的,在我用IF语句替换它之后抛出的。这个错误的根本原因是什么

[SqlException (0x80131904): Incorrect syntax near '0'.] System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +2442126 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5736904 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +628 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +3731 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +58 System.Data.SqlClient.SqlDataReader.get_MetaData() +89 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +379 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest) +2026 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +375 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +53 System.Data.SqlClient.SqlCommand.ExecuteScalar() +271 WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +111 *trim*.Forms.*trim*.Vehicle.GetId(String imei) in C:\Users\*trim*\Documents\Visual Studio 2017\WebSites\*trim*\App_Code\Vehicle.cs:258 ASP.Functions.UpdateSessionVehicle() in C:\Users\*trim*\Documents\Visual Studio 2017\WebSites\*trim*\App_Code\Functions.cshtml:148 ASP._Page_Default_cshtml.Execute() in C:\Users\*trim*\Documents\Visual Studio 2017\WebSites\*trim*\Default.cshtml:8 System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +198 System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors) +69 System.Web.WebPages.WebPage.ExecutePageHierarchy() +131 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +78 System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext) +116
Webmatrix的占位符似乎是@0而不是{0}。另外,要实际执行存储过程,应该使用Exec调用它

考虑到这一点,命令文本应定义为:

string sqlGetVehicle = "Exec sp_Scalar_VehicleId_For_IMEI @IMEI = @0";
根据另一种方法,可以是:

returnVal = db.Query("Exec sp_Scalar_VehicleId_For_IMEI", imei);

您确定这是sqlGetVehicle的正确语法吗?我认为它应该更像sp_Scalar_VehicleId_For_IMEI@IMEI=@0-如果可能的话。。。从未使用过Webmatrix和存储过程,甚至只是:returnVal=db.QueryExec sp_Scalar_VehicleId_For_IMEI,IMEI;你说得对,这是我的代币格式。我发誓我快瞎了。回答这个问题,我会选择它和前面的执行官,这是所有其他人的:/
returnVal = db.Query("Exec sp_Scalar_VehicleId_For_IMEI", imei);