ホームページ  >  記事  >  バックエンド開発  >  C#でのDBNULLの説明

C#でのDBNULLの説明

黄舟
黄舟オリジナル
2017-10-05 15:30:372033ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。