2012-03-15 20 views
5

Nie jestem pewien, co dokładnie robię źle, czy ktoś może to poprawić, proszę? Potrzebuję określić typ pobieranej kolumny z bazy danych SQL Server przy użyciu C#.Pobierz typ danych kolumny SQL Server za pomocą C#

Powiedz, mam to:

SqlConnection cn = new SqlConnection("Sql Connection String"); 
SqlCommand cmd = new SqlCommand("SELECT * FROM [TableName]", cn); 
SqlDataReader rdr = cmd.ExecuteReader(); 

while (rdr.Read()) 
{ 
    for (int c = 0; c < rdr.VisibleFieldCount; c++) 
    { 
     System.Type type = rdr.GetFieldType(c); 

     //So can I do this? (Pseudo-code) 
     //switch(type) 
     //{ 
     //case string: 
     //case int: 
     //case DateTime: 
     //etc. 
     //} 
    } 
} 
+1

Czy istnieje powód, dlaczego nie korzystają z kontekstu? Dlaczego nie używasz LinqToSql lub Entity Framework? – Mathieu

+0

Tak. Nie wiem, co to jest. Czy masz link, który mogę sprawdzić? – ahmd0

+0

Sprawdź to powiązane pytanie: http://stackoverflow.com/questions/258840/how-should-i-get-started-learning-about-ado-net-entity-framework – Mathieu

Odpowiedz

10

można wykonać następujące czynności:

/* ... code .... */ 

System.Type type = rdr.GetFieldType(c); 

switch (Type.GetTypeCode(type)) 
{ 
    case TypeCode.DateTime: 
     break; 
    case TypeCode.String: 
     break; 
    default: break; 
} 

/* ... code .... */ 
+0

Dzięki , koleś. Działa, z wyjątkiem dwóch przypadków: gdy mam typy danych UNIQUEIDENTIFIER i BINARY. Obie są zwracane jako Object, kiedy powinny być Guid i Byte []. Masz pomysł, jak sobie z tym poradzić? – ahmd0

+0

Nie wiem na ten temat, z wyjątkiem analizowania wartości ... – xandercoded

+0

@ ahmd0: 'if (type == typeof (System.Guid))' na przykład. – Guvante

Powiązane problemy