我有一个非常奇怪的问题。我有一个存储过程,它具有以下参数:
@Id int OUTPUT,
@DataSourceId int,
@OwnerId int,
@Size numeric(16,6),
@SizeUnitId int,
@LayCanFrom datetime,
@LayCanTo datetime,
@DischargeDate datetime,
@IMO int,
@ProductIds inttable readonly,
@LoadPortIds inttable readonly,
@DischargePortIds inttable readonly,
@LoadCountryIds inttable readonly,
@DischargeCountryIds inttable readonly,
@LoadZoneIds inttable readonly,
@DischargeZoneIds inttable readonly,
@FreightRate numeric(16,6),
@FreightRateUnitId int,
@StateId int,
@OriginalMessage varchar(max),
@Comments varchar(max) = null
这里感兴趣的特定参数是@Size numeric(16,6)。在 C# 方面,当我调用存储过程时,我将参数声明为:
var paramSize = command.Parameters.AddParameter("@Size", this.Size);
paramSize .SqlDbType = SqlDbType.Decimal;
paramSize .Size = 16;
paramSize .Precision = 6;
我得到的连接字符串为:
using (var connection = new SqlConnection(
(context.Connection as EntityConnection).StoreConnection.ConnectionString))
{
// Call function to execute the stored proc.
}
然后我打开连接,并执行通常的操作command.ExecuteNonQuery();
Now @Size 作为 75000.000000 传入,这应该没问题,因为该字段是 numeric(16,6)。事实上,我已经在同一个表中有记录,在该 Size 列中有类似 75000.000000 的值。但是,当我打电话时command.ExecuteNonQuery();
,它会返回
参数值“75000.000000”超出范围。
因此,我决定将存储过程中的 @Size 默认设置为 75000.000000,而不是传入参数。你猜怎么着?有用!另一个有趣的事情是我正在尝试使用 SQL Profiler 捕获 SP 执行,无论我尝试什么,或者我选择捕获哪些事件,我都无法看到 SP 执行。这是因为我从 EF storeconnection 获取我的连接字符串吗?有没有人遇到过这样的事情?这让我有点发疯!:)