我有以下存储过程,旨在创建一个新的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;