1 개요
다음 예에서 무엇이 잘못되었다고 생각하시나요? 문제를 빠르게 찾아 해결하실 수 있다면 이 글은 건너뛰셔도 됩니다. 감사합니다~~.
1 List<Base_Employee> ltPI = new List<Base_Employee>(); 2 DataTable dt = GetBase_UserInfoToDataTable(); 3 for (int i = 0; i < dt.Rows.Count; i++) 4 { 5 Base_Employee base_Employee= new Base_Employee(); 6 base_Employee.EmployeeId= dt.Rows[i]["EmployeeId"].ToString();//EmployeeId为string类型 7 base_Employee.Age =(int)dt.Rows[i]["Age"];//Age为int类型 8 base_Employee.GraduationDate = (DateTime)dt.Rows[i]["GraduationDate"];//GraduationDate 为DateTime类型 9 }
생각해 보세요. 잘 모르겠으면 아래 사진에 표시된 부분이 문제입니다.
좋습니다. 이 글은 이 문제를 해결하기 위한 것입니다. 그게 바로 제가 다음에 알려드릴 System.DBNULL 타입
2 콘텐츠 공유
2.1 .NET에서는 흔히 사용되는 기본 데이터 타입
int, string, char 등이 익숙합니다. 모두에게 기본 데이터 유형이지만 대부분의 사람들은 System.DBNull에 익숙하지 않을 것입니다. 그러나 위의 문제를 해결하는 것은 큰 아이디어입니다.
2.2 SqlServer
varchar, nvarchar, int, bit,decimal,datetime 등의 일반적인 데이터 유형은 기본적으로 .net의 데이터 유형과 일대일로 대응됩니다(varchar 및 nvarchar는 모두 . net string형)
2.3 SqlServer
.net에서 변수를 정의할 때 변수에 초기값을 할당하지 않으면 시스템은 기본적으로 int와 같은 초기 값 유형의 기본값은 0이고 문자열 유형의 기본값은 string.Empty입니다. 일반적으로 다양한 유형의 기본 초기 값은 다르지만 SqlServer에서는 거의 모든 변수 유형의 초기 값이 있습니다. NULL입니다. 이는 사용자 정의 값이거나 시스템 기본값 NUL을 의미합니다. 이것이 문제의 핵심입니다. int 유형을 예로 들면, 데이터베이스에서 INT에 값을 할당하지 않으면 기본값은 NULL입니다. 이 값이 .net의 정수 변수에 할당되면 예외가 발생합니다. 던져질 것이다.
2.4 System.DBNull이란 무엇입니까?
DBNull은 Object를 상속하는 클래스이며 해당 인스턴스는 데이터의 NULL 값에 해당하는 DBNull.Value입니다.
2.5 DBNull이 다른 데이터 유형을 나타낼 수 있는 이유는 무엇입니까?
데이터베이스에서는 데이터가 객체에 저장됩니다.
2.6 위 문제 해결 방법
조건 판단 추가
문자열 유형이 비어 있는지, DBNull이 NULL인지 여부를 판단할 수 있습니다
1 List<Base_Employee> ltPI = new List<Base_Employee>(); 2 DataTable dt = GetBase_UserInfoToDataTable(); 3 for (int i = 0; i < dt.Rows.Count; i++) 4 { 5 Base_Employee base_Employee= new Base_Employee(); 6 base_Employee.EmployeeId= dt.Rows[i]["EmployeeId"].ToString();//EmployeeId为string类型 7 //base_Employee.Age =(int)dt.Rows[i]["Age"];//Age为int类型 8 if (dt.Rows[i]["Age"]!=System.DBNull.Value) 9 { 10 base_Employee.Age = int.Parse(dt.Rows[i]["Age"].ToString()); 11 //base_Employee.Age = (int)dt.Rows[i]["Age"];//拆箱 12 //base_Employee.Age =Convert.ToInt16( dt.Rows[i]["Age"]); 13 } 14 //base_Employee.GraduationDate = (DateTime)dt.Rows[i]["GraduationDate"];//GraduationDate 为DateTime类型 15 if (dt.Rows[i]["GraduationDate"].ToString()!="") 16 { 17 base_Employee.GraduationDate = Convert.ToDateTime(dt.Rows[i]["GraduationDate"]); 18 base_Employee.GraduationDate = (DateTime)dt.Rows[i]["GraduationDate"]; 19 } 20 }
위 내용은 C#의 DBNULL 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!