Heim >Backend-Entwicklung >C#.Net-Tutorial >Erklärung von DBNULL in C#

Erklärung von DBNULL in C#

黄舟
黄舟Original
2017-10-05 15:30:372093Durchsuche

1 Übersicht

Was ist Ihrer Meinung nach an dem folgenden Beispiel falsch? Wenn Sie das Problem schnell finden und lösen können, können Sie diesen Artikel überspringen, vielen Dank~~.

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    }

Denken Sie eine Minute darüber nach. Wenn Sie es nicht herausfinden können, können Sie nach unten schauen Problem.

ok, dieser Artikel soll dieses Problem lösen. Das ist der System.DBNULL-Typ, den ich als Nächstes mit Ihnen teilen möchte

2 Inhaltsfreigabe

2.1 In .NET häufig verwendet Grundlegende Datentypen

int, string, char usw. sind grundlegende Datentypen, mit denen jeder vertraut ist, aber die meisten Menschen sollten mit System.DBNull nicht vertraut sein. Es löst jedoch das oben genannte Problem Probleme. Eine große Idee.

2.2 Allgemeine Datentypen in SqlServer

varchar, nvarchar, int, bit, decimal, datetime usw., grundsätzlich in .net Datentypen entsprechen eins zu eins (sowohl varchar als auch nvarchar entsprechen dem Zeichenfolgentyp in .net)

2.3 Anfangswerte gängiger Datentypen in SqlServer

Wenn wir in .net eine Variable definieren und ihr keinen Anfangswert zuweisen, verwendet das System beispielsweise standardmäßig den Anfangswert 0 und der Zeichenfolgentyp standardmäßig string.Empty. Im Allgemeinen sind die Standardanfangswerte verschiedener Typen unterschiedlich. In SqlServer ist der Anfangswert fast aller Variablentypen jedoch NULL, was entweder ein benutzerdefinierter Wert oder der Systemstandardwert NUL ist. Dies ist der Schlüssel zum Problem. Wenn wir INT in der Datenbank keinen Wert zuweisen, ist sein Standardwert NULL. Wenn dieser Wert einer Ganzzahlvariablen in .net zugewiesen wird, handelt es sich um eine Ausnahme wird geworfen.

2.4 Was ist System.DBNull?

DBNull ist eine Klasse, die Object erbt, und ihre Instanz ist DBNull.Value, was dem NULL-Wert in den Daten entspricht.

2.5 Warum kann DBNull andere Datentypen darstellen?

In der Datenbank werden Daten in Objekten gespeichert.

2.6 So lösen Sie das obige Problem

Bedingte Beurteilung hinzufügen

Sie können zur Beurteilung verwenden, ob der Zeichenfolgentyp leer ist oder ob DBNull gleich NULL ist


 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    }

Das obige ist der detaillierte Inhalt vonErklärung von DBNULL in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn