Avatar billede badal Nybegynder
13. september 2011 - 19:24 Der er 6 kommentarer og
1 løsning

Tjekke om kollone kan have NULL værdi

Hvordan kan jeg tjekke om en kollone kan have en NULL værdi?

Hvis f.eks. DateCreated kollone kan have værdi NULL i tabellen så vil jeg gerne vide det kodemæssigt.

Her er et lille eksempel:
DataTable tbl = GetData("SELECT * FROM USERS")
foreach (DataColumn c in t.Columns)
{
  Console.WriteLine(c.DataType.ToString());
// Kan den have et null Værdi
if(c.DataType == NULLABLE)
{  Console.WriteLine("Ja"); }
else {  Console.WriteLine("Nej"); }
}
Avatar billede heinzdmx Nybegynder
13. september 2011 - 19:30 #1
Det er sjældent at man tjekker om en kolonne kan have en nul-værdi, i det at man plejer at kende databasen når man laver programmer op i mod databasen.

Men i C# er der lavet mulighed for om en given kolonne har værdien NULL:

http://forums.asp.net/t/1193599.aspx
Avatar billede Syska Mester
13. september 2011 - 20:00 #2
DECLARE @objectid INT;
SELECT TOP 1 @objectid = object_id FROM sys.tables WHERE name = 'Servers'
SELECT * FROM sys.all_columns WHERE object_id = @objectid AND name = 'SID'

Nu har du en row med en masse informationer om den column 'SID' fra tabelen 'Servers'

Men som "heinzdmx" skriver, hvorfor vil du det? Hvad for et problem prøver du at løse. Der må helt sikkert findes en bedre måde.

mvh
Avatar billede badal Nybegynder
13. september 2011 - 22:06 #3
Jeg er igang med at lave et værktøj der kan genere kode til mig. Min egen OR Mapper kan man kalde det. 

I den forbindelse ønsker jeg at mit værktøj indlæser en tabel via en SQL sætning f.eks. "SELECT * FROM Users", og derefter genere kode til mig der kan indsætte, opdater, slet, og hente data og mm. Det fungere fint, men jeg har problemer når domain klassen skal defineres. Se nedenstående eksempel:

Hvis man har en tabel som nedenstående som har en nullable datetime kollenne:
User()
Id int
DateCreated datetime nullable

Skal gerne gerne genere følgende kode:
public class User
{
  public int Id {get; set;}
  public DateTime? DateCreated {get; set;}
}

men for at den skal det skal koden jeg er ved skrive udføre noget lign:

DataTable tbl = GetData("SELECT * FROM USERS")
foreach (DataColumn c in t.Columns)
{
  Console.WriteLine(c.DataType.ToString());
// Kan den have et null Værdi
if(c.DataType == NULLABLE)
{  Console.WriteLine("  public DateTime? {get; set;}"); }
else {  Console.WriteLine("  public DateTime {get; set;}"); }
}

Håber det gav mening.
Avatar billede arne_v Ekspert
14. september 2011 - 01:45 #4
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='xxxxx'

vil returnere en masse info omkring tabellen xxxxx bl.a. en kolonne IS_NULLABLE.

Og den metode er i vid udstraekning portabel mellem forskellige databaser.
Avatar billede badal Nybegynder
14. september 2011 - 08:54 #5
hej arne
det er præcis det jeg  søgte. kan du komme med et svar
Avatar billede johny Nybegynder
14. september 2011 - 08:57 #6
Du kan ikke se på datatypen om den er nullable, men i stedet på kolonnens AllowDBNull property. Den sidder direkte på det DataColumn objekt du har fat i.

Er der nogen bestemt grund til at du kalder "SELECT * FROM USERS"? Hvis det kun er til at få META data ud, så vil jeg nok lige tilføje et "WHERE 1 = 2", da du så stadig vil få alle informationerne om tabellen med ud.
Avatar billede arne_v Ekspert
14. september 2011 - 15:00 #7
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester