Maison  >  Article  >  développement back-end  >  Explication de DBNULL en C#

Explication de DBNULL en C#

黄舟
黄舟original
2017-10-05 15:30:372041parcourir

1 Aperçu

Selon vous, qu'est-ce qui ne va pas avec l'exemple suivant ? Si vous parvenez à trouver le problème rapidement et à le résoudre, vous pouvez ignorer cet article, merci~~.

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    }

Réfléchissez-y une minute, OK. Si vous n'arrivez pas à comprendre, vous pouvez regarder en bas. La zone marquée dans l'image ci-dessous est la. problème.

ok, cet article est pour résoudre ce problème. C'est le type System.DBNULL que je souhaite partager avec vous ensuite

2 Partage de contenu

2.1 Dans .NET, base couramment utilisée Les types de données

int, string, char, etc. sont des types de données de base que tout le monde connaît, mais la plupart des gens ne devraient pas être familiers avec System.DBNull. Cependant, cela résout les problèmes ci-dessus. .Une grande idée.

2.2 Types de données courants dans SqlServer

varchar, nvarchar, int, bit, decimal, datetime, etc., essentiellement dans .net Le les types de données correspondent un à un (varchar et nvarchar correspondent au type de chaîne dans .net)

2.3 Valeurs initiales des types de données courants dans SqlServer

Dans .net, lorsque nous définissons une variable, si nous ne lui attribuons pas de valeur initiale, le système prendra par défaut la valeur initiale. Par exemple, le type int est par défaut 0 et le type chaîne est par défaut. string.Empty.En général, différents types Les valeurs initiales par défaut sont différentes ; cependant, dans SqlServer, la valeur initiale de presque tous les types de variables est NULL, qui est soit une valeur définie par l'utilisateur, soit la valeur par défaut du système NUL. C'est la clé du problème. En prenant le type int comme exemple, lorsque nous n'attribuons pas de valeur à INT dans la base de données, sa valeur par défaut est NULL. Lorsque cette valeur est affectée à une variable entière dans .net, une exception. sera jeté.

2.4 Qu'est-ce que System.DBNull ?

DBNull est une classe qui hérite d'Object, et son instance est DBNull.Value, qui est équivalente à la valeur NULL dans les données.

2.5 Pourquoi DBNull peut-il représenter d'autres types de données ?

Dans la base de données, les données sont stockées dans des objets.

2.6 Comment résoudre le problème ci-dessus

Ajouter un jugement conditionnel

Vous pouvez indiquer si le type de chaîne est vide ou si DBNull est égal à NULL pour juger


 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    }

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn