1

출력 매개 변수 pf 형식이 numeric(18,0) 인 SQL Server에 저장 프로 시저가 있습니다. C#을에서 나는 SqlDbType.DecimalSqlParameter을 만들고 내가 0 여기C#에서 저장 프로 시저에 매개 변수 전달 : 숫자 (18, 0)에 사용할 SQLDbType

18 규모로 정밀도를 설정하는 것은 내 코드입니다 :

queryParameters[2] = new SqlParameter("@Id", SqlDbType.Decimal); 
queryParameters[2].Precision = 18; // # digits 
queryParameters[2].Scale = 0;  // # decimals 
queryParameters[2].Direction = ParameterDirection.Output; 

저장 프로 시저가 제대로 실행되고, 제대로 출력 매개 변수를 반환 되나 다음과 같이 C#의 긴 변수로 구문 분석 할 때 :

long id = (long)queryParameters[2].Value; 

변환 할 수 없다고 말합니다.

그러나 SqlParameter 유형을 SqlDbType.Bigint으로 수정하면 작동합니다.

그래서 내가 정확히 SqlDbType.BigInt으로 전달하면 되겠습니까? 또는 SqlDbType.Decimal으로 전달하고 long 대신 decimal C# 변수를 사용하는 것이 더 낫습니다.

SqlDbType.Decimal로 전달하고 아래하고 또한 노력하고 있습니다 :

decimal id = (decimal)queryParameters[2].Value; 

그래서 접근 방식이 최선의이 숫자가 소수점없이 정수는 것을 고려? 이 데이터베이스에 numeric(...)로 정의되어있는 경우

답변

2

, 그것은 는 C#에서 decimal을 수있다 - 그것은이 (현재) 쉼표 여부를 후 숫자되어 있는지 여부를 확인합니다.

bigint/long으로 잘못 표시하지 마십시오. 그 유형이 아닙니다. 또한 - 왜 구문 분석하려고합니까/long 처음으로 변환 할? 나에게 아무 의미 ..... 그것은 decimal처럼 보이는 decimal처럼 산책하는 decimal처럼 꽥꽥 - 당신은 IT가decimal입니다 꽤 확신합니다!

갑자기 SQL 서버 유형이 numeric(20,2)으로 변경되면 어떻게됩니까? C#에서 decimal을 사용하면 괜찮습니다. 변경하지 않아도됩니다. 대신 long을 사용한 경우 이제 코드를 decimal으로 변경해야합니다.

항상 가장 적합한 유형을 사용 - 그리고 T-SQL numeric() 위해, 즉 C의 #/.NET에서 decimal을합니다.

+0

동의합니다. 감사. – user1624552