정말 이상한 문제가 있습니다.숫자 (x, x)부터 십진수 (x, x)까지 SQL 서버 이상한
@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
여기에 관심의 특정 PARAM은 @Size 숫자 (16,6)입니다 : 나는 다음과 같은 PARAMS을 가진 저장된 프로 시저가 있습니다. 나는이 연결 문자열을 얻고있다
var paramSize = command.Parameters.AddParameter("@Size", this.Size);
paramSize .SqlDbType = SqlDbType.Decimal;
paramSize .Size = 16;
paramSize .Precision = 6;
: 나는 저장된 프로 시저를 호출하고 때 C#을 측면에서 은 내가으로 PARAM을 선언하고 내가 연결을 엽니 다
using (var connection = new SqlConnection(
(context.Connection as EntityConnection).StoreConnection.ConnectionString))
{
// Call function to execute the stored proc.
}
및 수행 보통 command.ExecuteNonQuery();
@Size는 필드가 숫자 (16,6)이므로 75000.000000으로 전달됩니다. 사실, 같은 테이블에 이미 Size 열에 75000.000000과 같은 값을 가진 레코드가 있습니다. 그러나 command.ExecuteNonQuery();
으로 전화하면
매개 변수 값 '75000.000000'이 (가) 범위를 벗어납니다.
그래서 매개 변수를 전달하는 대신 저장 프로 시저의 @Size를 75000.000000으로 기본값으로 설정하기로 결정했습니다. 그리고 어떻게 됐을 까? 그것은 작동합니다! 또 다른 흥미로운 점은 SQL 프로파일 러를 사용하여 SP 실행을 캡처하려고하고 있으며 어떤 시도를했는지 또는 캡처 할 이벤트를 선택했는지에 상관없이 SP 실행을 볼 수 없다는 것입니다. EF storeconnection에서 연결 문자열을 가져 오는 중입니까? 아무도 전에 이런 걸 겪었습니까? 이것은 나에게 약간 미쳤다! :)
Facepalm! 내가 질문을 게시하기 전에 MSDN을 좀 더 잘 읽어야합니다. 나는 바보처럼 느껴진다! 고마워요! – tranceporter