【发布时间】:2015-11-30 11:02:45
【问题描述】:
我在从 VB 调用 SQL 存储过程时遇到了一个奇怪的问题。
我在 SQL 上创建了一个存储过程。代码sn-p如下:
ALTER PROCEDURE [dbo].[PE0010_InsertDPW]
@DailyWashCycle AS INT,
@PumpNo AS INT,
@WashDurationSecs AS INT,
@Result AS INT OUTPUT
AS
BEGIN
SET @Result= 1
--All other code commented out
END
在 VB 方面,我创建了一个指向 SQL 和数据集的链接,其中包含此存储过程。调用存储过程的实际VB代码如下:
Dim DailyCycle As Integer = 0
Dim PumpNo As Integer = 0
Dim Duration As Integer = 0
Dim res As Integer = 0
Dim DBQueries As New dsProcessDBTableAdapters.QueriesTableAdapter
DBQueries.PE0010_InsertDPW(DailyCycle, PumpNo, Duration, res)
我收到以下消息:
Data Systems Manager.exe 中出现“System.AccessViolationException”类型的未处理异常
附加信息:试图读取或写入受保护的内存。这通常表明其他内存已损坏。”
但是,如果我在 SQL 上注释掉除 @Result 以外的任何变量,并在 VB 上更新存储过程并使用 3 个变量运行它,那么它就可以正常工作。
如果我使用所有 4 个变量从 SQL 中执行 SQL 过程,它就可以正常工作,所以我的链接或其他东西一定有问题。在创建链接时,我尝试将 .NET Framework 数据提供程序从 SQL Server 更改为 OLE DB。出现同样的问题。尝试关闭所有内容并再次打开它。没有区别。
有人遇到过同样的问题吗?我现在完全没有想法了。
电脑: 英特尔酷睿 i5-3550 CPU @3.30GHz, 12GB 内存
【问题讨论】:
-
我的猜测是 QueriesTableAdapter 不理解 proc 中的 OUT 参数。您可以尝试使用
RETURN @Result或SELECT @Result作为 proc 的最后几行,看看会发生什么(没有 OUT 参数) -
感谢您的评论 Rikalous。 OUT 参数与 3 个 SQL 输入变量而不是 4 个输入变量完美配合。我这样做的原因是我过去在 VB 端接收 RETURN 变量时遇到了麻烦。
标签: sql-server vb.net stored-procedures visual-studio-2013 access-violation