Dapper得到“指定演員陣容無效”。 for ReturnValue參數值

c# dapper stored-procedures

我正在嘗試使用SCOPE_IDENTITY將長主鍵返回到c#,使用DynamicParameter的ReturnValue選項。

以下是Dapper網站的示例代碼:

var p = new DynamicParameters();
p.Add("@a", 11);
p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output);
p.Add("@c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

cnn.Execute("spMagicProc", p, commandType: commandType.StoredProcedure); 

int b = p.Get<int>("@b");
int c = p.Get<int>("@c");

我寧願做以下操作,而不是返回int,因為我的主鍵字段應該是bigint

var p = new DynamicParameters();
p.Add("@a", 11);
p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output);
p.Add("@c", dbType: DbType.Int64, direction: ParameterDirection.ReturnValue);

cnn.Execute("spMagicProc", p, commandType: commandType.StoredProcedure); 

int b = p.Get<int>("@b");
int c = p.Get<long>("@c");

在我的過程中,我正在使用“RETURN SCOPE_IDENTITY()”。

但是這樣做似乎導致“指定演員表無效”。例外。

一般承認的答案

存儲過程的返回值總是隱式為整數,即int 。因此,您只能將其視為整數。如果您嘗試將其拆分為long ,則會失敗。

選項:

  • 如果值適合,只需在.NET端將其視為int
  • 否則使用bigint類型的out參數,並在.NET端將其視為long
  • 或者使用selectQuery<long>(...).Single()

熱門答案

如果我沒記錯的話,SCOPE_IDENTITY()會返回一個小數( http://msdn.microsoft.com/en-us/library/ms190315.aspx ),因此會產生無效的強制轉換異常。

您需要將它轉換為bigint(在SQL中)才能使其按您的需要工作。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因