У меня действительно странная проблема. У меня есть хранимая процедура, которая имеет следующую Params:Числовое (x, x) до десятичного (x, x) Sql Server weirdness
@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 числовым (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();
Теперь @Size передается как 75000.000000, что должно быть хорошо, так как поле является числовым (16,6). На самом деле, у меня уже есть записи в той же таблице, которые имеют значения, такие как 75000.000000 в столбце «Размер». Однако, когда я звоню command.ExecuteNonQuery();
, он возвращается с
Значение параметра '75000.000000' находится за пределами допустимого диапазона.
Таким образом, вместо того, чтобы передавать параметр, я решил установить значение по умолчанию @Size в сохраненной процедуре до 75000.000000. И угадай что? Оно работает! Еще один интересный вопрос заключается в том, что я пытаюсь захватить выполнение SP с использованием SQL Profiler, и независимо от того, что я пытаюсь или какие события я выбираю для захвата, я не могу увидеть выполнение SP. Это потому, что я извлекаю строку подключения из EF storageeconnection? Кто-нибудь сталкивался с чем-то подобным раньше? Это сводит меня с ума! :)
Facepalm! Я должен прочитать MSDN немного лучше, прежде чем ставить вопрос. Я чувствую себя идиотом! Большое спасибо! – tranceporter