2009-11-12 8 views
5

i ten kodgetschema ("Kolumny") + return DataType;

using (SqlConnection conn = new SqlConnection(ConnectionString)) 
        { 
         conn.Open(); 
         DataTable Databases = conn.GetSchema("Databases"); 
         DataTable Tables = conn.GetSchema("Tables"); 
         DataTable Columns = conn.GetSchema("Columns"); 
         conn.close(); 
        } 

muszę powrotu datattype przez odczytanie ciągu znaków w kolumnie "DATA_TYPE"

foreach (DataRow row in Columns.Rows) 
       if (row["TABLE_NAME"].ToString() == tableName) 
       { 
        if (fName == row["COLUMN_NAME"].ToString()) 
        { 
         //return Datatype 
         var x = row["DATA_TYPE"]; 
        } 
       } 

//// jeśli rzędów (DATA_TYPE [ ""] == „Int ") w jaki sposób można ustawić var ​​x przez DataType (Int) lub jak uzyskać typ danych według nazwy, która znajduje się w wierszu [" DATA_TYPE "] ?? !!

+0

proszę powiedz mi, co robić ?! – Asma

+0

if 'wiersz [" DATA_TYPE "] ==" int "' chcesz typ .NET x jest int? jeśli '" varchar (n) '" -> 'string' etc ... Tak? – manji

+0

witam, dzięki ........... tak, to czego potrzebuję ...... proszę powiedz mi jak? !! – Asma

Odpowiedz

4

rozwiązaniem byłoby, aby utworzyć odwzorowanie typów słowniku SQL .net typy:

Dictionary<string, Type> sqlToNetTypes; 

i wypełnić go z wszystkich możliwych typów można znaleźć w kolumnie „DATA_TYPE” i ich odpowiedniki .NET:

sqlToNetTypes.Add("int", typeof(int)); 
sqlToNetTypes.Add("varchar", typeof(sting)); 
sqlToNetTypes.Add("datetime", typeof(DateTime)); 
sqlToNetTypes.Add("bit", typeof(bool)); 
sqlToNetTypes.Add("numeric", typeof(float));//or double or decimal as you like... 
... 

następnie w metodzie pomocnika:

Type GetNETType(string sqlType) 
{ 
    if(sqlToNetTypes.ContainsKey(sqlType)) 
    { 
     return sqlToNetTypes[sqlType]; 
    }else 
    { 
     return typeof(object); //generic type 
    } 
} 

i wykorzystać go tak:

foreach (DataRow row in Columns.Rows) 
    if (row["TABLE_NAME"].ToString() == tableName) 
    { 
     if (fName == row["COLUMN_NAME"].ToString()) 
     { 
      //return Datatype 
      var x = GetNETType(row["DATA_TYPE"]); 
     } 
    } 
+0

dzięki za odpowiedź – Asma

+0

cieszę się, że pomaga. – manji