【问题标题】:'System.AccessViolationException' Accessing SQL Query from VB.net Express 2013'System.AccessViolationException' 从 VB.net Express 2013 访问 SQL 查询
【发布时间】: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 @ResultSELECT @Result 作为 proc 的最后几行,看看会发生什么(没有 OUT 参数)
  • 感谢您的评论 Rikalous。 OUT 参数与 3 个 SQL 输入变量而不是 4 个输入变量完美配合。我这样做的原因是我过去在 VB 端接收 RETURN 变量时遇到了麻烦。

标签: sql-server vb.net stored-procedures visual-studio-2013 access-violation


【解决方案1】:

好的,我已经找到解决问题的方法,但我仍然不知道为什么它给我带来了这么多麻烦。

我为 .NET Framework 4 编译了我的项目,以便与我工作中的所有系统兼容。这在过去从来都不是问题,但是当我选择 .NET 4 时,即使是新项目也会以同样的方式出现问题。我必须安装 .NET Framework 4.5.2 (KB2901907),然后在系统重启后一切都恢复正常。即使对于这个面向 .NET 4 的项目(没有进行其他更改)。奇怪,因为系统重启是我尝试的第一件事。似乎是某种 .NET Framework 问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 2016-08-28
    • 2015-01-15
    • 1970-01-01
    相关资源
    最近更新 更多