在我的应用程序中,我在多个位置收到一个奇怪的错误。基本上,我使用 SqlManager 和executeNonQuery()
方法调用数据库中的存储过程,但我得到一个异常说:
'44444' 附近的语法不正确
在 Visual Studio 中。问题是,我的值都不等于 '44444' 并且该字符串不在存储过程中。当我使用 SQL Server Profiler 开始跟踪时,我看不到该值。
我试过用谷歌搜索这个问题,唯一的问题是有人在将空值放入外键时遇到类似问题(我的值都不是空的)。
我调用存储过程的函数:
Try
Dim p As New List(Of SQLParametre)()
p.Add(New SQLParametre("@InvcNum", invcNum, SQLParametreType.String))
p.Add(New SQLParametre("@Sale", sale, SQLParametreType.Decimal))
p.Add(New SQLParametre("@Commission", commission, SQLParametreType.Decimal))
p.Add(New SQLParametre("@UpdtDate", DateTime.Today, SQLParametreType.Date))
m_Manager.executeNonQuery("TheSP", p)
Return True
Catch ex As Exception
m_Log.WriteLog("theSP crashed", ex.Message)
Return False
End Try
存储过程:
ALTER PROCEDURE [dbo].[TheSP]
@InvcNum varchar(9),
@Sale money,
@Commission money,
@UpdtDate as smalldatetime
AS
UPDATE tbInvc SET
Sale = Sale + @Sale,
Comm = Comm + @Commission,
updateDate = @UpdtDate
WHERE (Num = @InvcNum)
有人遇到过类似的问题,即不在查询/存储过程中的字符串引发语法错误吗?
编辑:我正在使用 Visual Studio 2012 和 SQL Server Management Studio 2012,并修复了存储过程中因更改列名称而导致的拼写错误。
更新
在 Management Studio 中运行存储过程后,我看到那里也出现了错误,所以错误不应该出现在 vb 代码中。
Management Studio 引发的错误也与我在 VS2012 中的异常中得到的错误不同:
消息 102,级别 15,状态 1,过程 tbInvc_UTrig,第 14 行
“44444”附近的语法不正确。