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 のデータ型に 1 対 1 で対応します (varchar と nvarchar は両方とも .net に対応します)。 net string type)
2.3 SqlServer の一般的なデータ型の初期値
.net では、変数を定義するときに、初期値を割り当てないと、システムはデフォルトのint などの初期値型のデフォルトは 0、文字列型のデフォルトは string.Empty です。ただし、SqlServer では、ほとんどすべての変数型の初期値が異なります。 NULL は、ユーザー定義値またはシステムのデフォルト値 NUL のいずれかであることを意味します。これが問題の鍵です。int 型を例にとると、データベースで INT に値を割り当てない場合、この値が .net の整数変数に割り当てられると、例外が発生します。投げられるだろう。 2.4 System.DBNull とは何ですか?
DBNull は Object を継承したクラスで、そのインスタンスは DBNull.Value であり、データ内の NULL 値に相当します。
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 中国語 Web サイトの他の関連記事を参照してください。