Sql 返回作用域标识时出现系统无效强制转换异常

Sql 返回作用域标识时出现系统无效强制转换异常,sql,vb.net,stored-procedures,sql-server-2014-express,Sql,Vb.net,Stored Procedures,Sql Server 2014 Express,我设计了以下存储过程来创建新的采购订单标题,并将新标题的新创建标识返回给我: CREATE PROCEDURE dbo.CreateNewPurchaseOrderHeader @purchaseOrderNumber NCHAR(10), @supplierId INTEGER, @supplierInvoiceAddressId INTEGER AS BEGIN SET NOCOUNT ON INSERT INTO PurchaseOrderHeaders (Purchase

我设计了以下存储过程来创建新的采购订单标题,并将新标题的新创建标识返回给我:

CREATE PROCEDURE dbo.CreateNewPurchaseOrderHeader @purchaseOrderNumber NCHAR(10),
@supplierId INTEGER,
@supplierInvoiceAddressId INTEGER

AS

BEGIN

  SET NOCOUNT ON

  INSERT INTO PurchaseOrderHeaders (PurchaseOrderNumber, PurchaseOrderDate, SupplierId, SupplierInvoiceAddressId, Posted, ModifiedDate)
    VALUES (@purchaseOrderNumber, GETDATE(), @supplierId, @supplierInvoiceAddressId, 0, GETDATE());

  SELECT SCOPE_IDENTITY()

END

GO
这是从我的应用程序中的以下代码行调用的(此处略为缩短,以供包含):

   Dim retval As Int32 = 0
retval = CInt(ftpe.CreateNewPurchaseOrderHeader(PurOrdNum, OwnerId, InvoiceAddressId))
运行时,应用程序在此行失败,并显示以下消息:

    An unhandled exception of type 'System.InvalidCastException' occurred in WindowsBase.dll

Additional information: Specified cast is not valid.
值得注意的是,现在已经在数据库上创建了采购订单头,我假设有什么东西回来了(当然,如果我在ssms中直接在数据库上执行该过程,我会将新标识返回到结果窗格)

我欢迎任何关于这个原因的建议。PurchaseOrderHeaderId(这是我要找的)被定义为Int类型,并被设置为identity(自动增量)

编辑:

当此操作失败时,以下处理程序将用catch突出显示,而(?)用红色波浪线划线

公共对象TryCatchWhen(对象源、委托回调、对象args、int numArgs、委托catchHandler) { 对象obj2=null; 尝试 { obj2=this.InternalRealCall(回调、args、numArgs); } 捕捉时(?) { 例外情况; if(!this.CatchException(源、异常、catchHandler)) { 投掷; } } 返回obj2; }

对Entity Framework数据模型创建的代码的进一步检查表明,为使用该过程而创建的函数返回的值类型为Nullable of(Integer),因此我将retval更改为该类型,但仍然得到了异常

但是我仍然得到由存储过程创建的PurchaseOrderHeader


鉴于我看到多个成功创建的采购订单标题(并且在调用过程之前我已经验证了输入参数的有效性),可能问题在于传递给
插入的值而不是
范围_identity()
@GordonLinoff的值我认为问题出在第二回合,只是想不出可能是什么。如果你在施法之前先把结果串起来,你会得到什么?@AndrewMortimer好主意,没有想到,所以就试了一下,不幸的是仍然是同一个问题。在问题中添加了一些额外的信息,你可以看到这场大爆炸成功了在标题上,我只是没有得到id。一些其他的想法:这个过程有效吗?你有没有其他类似的过程总是有效的?你能把scope_identified的值放到过程中的一个var中并返回var值吗?