집 >백엔드 개발 >C#.Net 튜토리얼 >C#에서 SQL 매개변수에 null 값을 전달할 때 발생하는 오류 및 해결 방법
C#의 Null은 SQL의 NULL과 다릅니다. SQL의 NULL은 C#에서 DBNull.Value로 표시됩니다.
참고: SQL 매개변수는 C#의 null 값을 허용할 수 없습니다. null이 전달되면 오류가 보고됩니다.
아래 예를 살펴보겠습니다.
1 SqlCommand cmd=new SqlCommand("Insert into Student values(@StuName,@StuAge)" ,conn);2 cmd.parameters.add("@StuName" ,stuName);3 cmd.parameters.add("@StuAge" ,stuAge);4 cmd.ExecuteNonQuery();
위 코드는 문제가 없는 것 같습니다. 실제로 stuName 또는 stuAge 값이 null인 경우 예외가 발생합니다. 그렇다면 어떻게 해결해야 할까요?
해결 방법: stuName 또는 stuAge의 값이 null인 경우 DBNull.Value를 전달하세요. 다음으로, 전달된 매개변수 값을 판단하기 위해 공용 클래스에 정적 일반 메소드를 작성합니다. null이면 DBNull.Value를 반환하고, 그렇지 않으면 원래 값을 반환합니다.
1 public static object SqlNull(object obj) 2 { 3 if(obj == null) 4 { 5 return DBNull.Value; 6 } 7 else 8 { 9 return obj;10 } 11 }
위 메서드를 호출한 후의 코드는 다음과 같습니다.
1 SqlCommand cmd=new SqlCommand("Insert into Student values(@StuName,@StuAge)" ,conn);2 cmd.parameters.add("@StuName" ,SqlNull(stuName));3 cmd.parameters.add("@StuAge" ,SqlNull(stuAge));4 cmd.ExecuteNonQuery();
또한 매개변수 값이 컨트롤(예: 텍스트 상자)의 값에서 오는 경우 전달된 매개변수 값은 null이어야 합니다(컨트롤의 값은 null이 아니기 때문에 값이 없더라도 ""가 됩니다). 컨트롤의 값이 ""(예: 입력된 문자가 없는 경우)인 경우 텍스트 상자에서) 데이터 테이블 필드 값이 NULL이면 SqlNull 메서드를 약간만 수정하면 됩니다.
1 public static object SqlNull(object obj) 2 { 3 if(obj == null || obj.ToString() == "") 4 { 5 return DBNull.Value; 6 } 7 else 8 { 9 return obj;10 } 11 }
확장:
다음과 같이 SQL 매개변수를 전달할 때 매개변수 그룹을 전달할 수도 있습니다.
1 SqlParameter[] parm = new SqlParameter[] 2 { 3 new SqlParameter("@StuName", SqlNull(stuName)), 4 new SqlParameter("@StuAge", SqlNull(stuAge)) 5 } 6 if(parm != null) 7 { 8 cmd.Parameters.AddRange(parm); 9 }10 cmd.ExecuteNonQuery();
참고: new SqlParameter(매개변수 이름, 매개변수 값)의 매개변수 값도 null 값을 허용하지 않으며, parm 매개변수 그룹도 null을 허용하지 않습니다. if(parm != null의 판단) ) 이보다 작을 수는 없습니다.
위 내용은 C#에서 SQL 매개변수에 null 값을 전달할 때 발생하는 오류 및 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!