SQL命令不工作时的帮助

SQL命令不工作时的帮助,sql,vb.net,tsql,ado.net,sqlcommand,Sql,Vb.net,Tsql,Ado.net,Sqlcommand,我试图执行一个SQL命令 语法如下 Public Shared Function CanRaiseWorkOrder(connection As IDbConnection, ProductID As Guid) As Boolean Using sqlCmd As IDbCommand = connection.CreateCommand With sqlCmd .CommandTimeout = 30

我试图执行一个SQL命令

语法如下

    Public Shared Function CanRaiseWorkOrder(connection As IDbConnection, ProductID As Guid) As Boolean
        Using sqlCmd As IDbCommand = connection.CreateCommand
            With sqlCmd
                .CommandTimeout = 30
                .CommandType = CommandType.Text
                .CommandText = "DECLARE @CanRaiseWorkOrder BIT, @WorkOrderQtyCount INT, @ProductAvailCount INT SET @WorkOrderQtyCount = (SELECT SUM(Qty) FROM WorkOrder WHERE ProductID = @ProductID AND WorkOrder.Status <> 4) --4 = Voided SET @ProductAvailCount = (SELECT Qty FROM Product WHERE ProductID = @ProductID) IF @WorkOrderQtyCount < @ProductAvailCount BEGIN SET @CanRaiseWorkOrder = 1 END ELSE BEGIN SET @CanRaiseWorkOrder = 0 END SELECT @CanRaiseWorkOrder AS CanRaiseWorkOrder"

                Dim params As New List(Of IDbDataParameter)({
                                                               ProductDAL.CreateTSqlParameter("@ProductID", DbType.Guid, ProductID)
                                                            })

                .Parameters.AddRange(params)

                Return .ExecuteScaler(Of Boolean)()
            End With
        End Using
    End Function
您可能会注意到,在如何创建参数和执行命令方面存在一些定制,但您可以假设系统的这些方面按要求工作,我们有大量代码可以使用这些方法正确运行

我可能会有人问为什么这不是一个存储过程,答案是因为我的老板这么说

我已经运行了SQL profiler,下面是这个查询实际生成的输出

exec sp_executesql N'DECLARE @CanRaiseWorkOrder BIT, @WorkOrderQtyCount INT, @ProductAvailCount INT SET @WorkOrderQtyCount = (SELECT SUM(Qty) FROM WorkOrder WHERE ProductID = @ProductID AND WorkOrder.Status <> 4) --4 = Voided SET @ProductAvailCount = (SELECT Qty FROM Product WHERE ProductID = @ProductID) IF @WorkOrderQtyCount < @ProductAvailCount BEGIN SET @CanRaiseWorkOrder = 1 END ELSE BEGIN SET @CanRaiseWorkOrder = 0 END SELECT @CanRaiseWorkOrder',N'@ProductID uniqueidentifier',@ProductID='0908C780-763F-4CE6-B074-CEC01F4451B4'
最初创建查询分析器时,在查询分析器中运行代码可以正常工作,但如果按照SQL命令的输出运行上面的查询,那么我得到的所有命令都将成功完成


有什么想法吗?

我想我会给出一个答案,但考虑到我已经起床多久了,我还想确保我的回答是准确的:咧嘴笑:

从我所看到的,这可能是由于浓缩你的声明,为了使它成为代码文件中的一条直线,你在你的陈述中有一个注释声明:

--4 = Voided [...]
发生的情况是,您只执行了DECLARE和first SET命令,这些命令没有错误,但语句的其余部分被忽略,因为它遵循注释声明-


如果确实压缩了查询,请确保删除了注释行。一旦它们在同一行上,SQL就不在乎了,它会忽略任何超过-的内容。

我是在做白日梦,还是-4=无效。。。将字符串的其余部分视为注释,只留下一个SET命令?@bradcristie:回答这个问题吧!天哪,我觉得自己像个白痴。。。就这样。我想我自己起床太久了。哈哈,我已经尝试了我能想到的一切,却一事无成。每次在查询分析器中调试时,我都会格式化所有内容,从而消除问题。对不起,我浪费了你的时间。@MaximGershkovich:不用担心,经过长时间的编码训练后,我们都有手掌脸了-