返回范围标识时系统无效的转换异常

时间:2016-02-02 11:56:48

标签: sql vb.net stored-procedures sql-server-2014-express

我有以下存储过程,旨在创建一个新的Purchase Order Header并返回给我新的标题新标题:

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.

值得注意的是,到目前为止,已经在数据库上创建了Purchase Order Header,我假设有东西回来了(当然如果我在ssms中直接在数据库上执行该过程,我会得到新的身份返回到结果窗格。

我欢迎任何关于其原因的建议。 PurchaseOrderHeaderId(我就是之后)被定义为Int类型并被设置为identity(autoIncrement)。

修改

当失败时,下面的处理程序会突出显示catch时(?)用红色波浪线下划线

public object TryCatchWhen(object source,Delegate callback,object args,int numArgs,Delegate catchHandler)     {         object obj2 = null;         尝试         {             obj2 = this.InternalRealCall(callback,args,numArgs);         }         赶上(?)         {             例外例外;             if(!this.CatchException(source,exception,catchHandler))             {                 扔;             }         }         return obj2;     }

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

但我仍然在使用存储过程创建的PurchaseOrderHeaders;

enter image description here

0 个答案:

没有答案