SQL 예외: 'Int32' 값 유형으로 변환할 수 없습니다.
SQL 쿼리에서 특정 사용자에 대한 CreditHistory
테이블의 Amount
열 합계를 계산하려고 합니다. 그러나 CreditHistory
테이블에 해당 사용자에 대한 레코드가 없으면 "구체화된 값이 null이므로 'Int32' 값 유형으로 변환할 수 없습니다."라는 오류가 발생합니다. 이는 기본 데이터에 Null 값이 포함된 경우 SQL SUM()
이 Null 허용 값을 반환하는 반면 C#에서는 결과에 Null 허용이 아닌 int 유형이 필요하기 때문입니다.
쿼리에서 null 값을 처리하고 이 오류를 방지하려면 다음과 같은 몇 가지 기술을 사용할 수 있습니다.
사용 DefaultIfEmpty
:
Sum()
을 적용하기 전에 DefaultIfEmpty(0)
을 사용하도록 쿼리를 수정하세요. 이렇게 하면 레코드를 찾을 수 없는 경우 결과가 비어 있지 않고 기본적으로 0이 됩니다.
<code class="language-csharp">var creditsSum = (from u in context.User join ch in context.CreditHistory on u.ID equals ch.UserID where u.ID == userID select ch.Amount).DefaultIfEmpty(0).Sum();</code>
null 허용 데이터 유형 사용:
CreditHistory
테이블의 Amount
열 유형을 int?
과 같은 null 허용 유형으로 변경합니다. 이렇게 하면 쿼리가 null 값을 반환할 수 있습니다.
<code class="language-csharp">var creditsSum = (from u in context.User join ch in context.CreditHistory on u.ID equals ch.UserID where u.ID == userID select ch.Amount).Sum(); // Sum() will now handle nulls correctly ``` 或者更简洁的写法: ```csharp var creditsSum = (from u in context.User join ch in context.CreditHistory on u.ID equals ch.UserID where u.ID == userID select ch.Amount).Sum() ?? 0; // 使用null-coalescing operator</code>
사용 COALESCE
:
null 값을 지정된 값으로 바꾸려면 COALESCE
함수를 사용하세요. 이 예에서는 ISNULL(ch.Amount, 0)
또는 COALESCE(ch.Amount, 0)
을 사용하여 null 값을 확인하고 SQL 문에서 해당 값을 0으로 바꿀 수 있습니다.
<code class="language-sql">SELECT ISNULL(SUM(Amount), 0) AS CreditsSum FROM CreditHistory WHERE UserID = @userID;</code>
그런 다음 C#에서 직접 결과를 받습니다.
이러한 기술을 적용하면 쿼리에서 null 값을 효율적으로 처리하고 "값 유형으로 변환할 수 없습니다" 오류를 방지할 수 있습니다. 선택하는 방법은 선호도와 데이터베이스 시스템에 따라 다릅니다. 방법 2와 3은 데이터베이스 측에서 null 값을 보다 직접적으로 처리하는 반면, 방법 1은 C# 측에서 이를 처리합니다.
위 내용은 '값 유형 'Int32'로의 변환 실패' 오류를 방지하기 위해 SQL SUM()에서 Null 값을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!