2012-03-15 65 views
5

我不確定我做錯了什麼,請問有人能糾正它嗎?我需要使用C#從SQL Server數據庫中確定檢索列的類型。使用C獲取SQL Server列的數據類型

說,我有這樣的:

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

是否有一個理由,爲什麼你不使用上下文?爲什麼不使用LinqToSql或Entity Framework? – Mathieu 2012-03-15 01:14:59

+0

是的。我不知道那是什麼。你有我可以檢查的鏈接嗎? – ahmd0 2012-03-15 01:19:08

+0

看看這個相關的問題:http://stackoverflow.com/questions/258840/how-should-i-get-started-learning-about-ado-net-entity-framework – Mathieu 2012-03-15 02:34:07

回答

10

你可以做到以下幾點:

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

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

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

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

謝謝,夥計。它工作,除了兩種情況:當我有一個UNIQUEIDENTIFIER和BINARY數據類型。兩者都作爲Object返回,當它們應該是Guid和Byte []時。任何想法如何處理? – ahmd0 2012-03-15 01:26:37

+0

我不知道解決方法,除了解析值... – xandercoded 2012-03-15 02:08:00

+0

@ ahmd0:'if(type == typeof(System.Guid))'例如。 – Guvante 2012-03-15 02:11:02

相關問題