2017-05-18 1 views
0

Dans le projet SSDT, à l'aide de l'API DacFx, j'interroge dans le modèle de mémoire d'une base de données. J'ai essayé de récupérer le type d'une colonne, mais ne peux pas le comprendre. Une idée de comment cela pourrait-il être fait?Comment obtenir le type d'une colonne en utilisant DacFx API?

private void TestMethod() 
     { 
      using(TSqlModel model = 
       new TSqlModel(SqlServerVersion.Sql110, new TSqlModelOptions {})) 
      { 
       string[] scripts = new[] 
       { 
        "CREATE TABLE t1 (c1 NVARCHAR(30) NOT NULL)", 
        "CREATE TABLE t2 (c2 INT NOT NULL)" 
       }; 
       foreach (string script in scripts) 
       { 
        model.AddObjects(script); 
       } 

       var tables = model.GetObjects(DacQueryScopes.All, Table.TypeClass); 
       var cols = tables.First().GetReferenced(Table.Columns); 
       foreach (TSqlObject col in cols) 
       { 
        //?? how can I get the data type of the column? 
        string dataType = col.??; 
        if (dataType == "int") 
        { 
         //my thing here 
        } 
       } 
      } 
     } 

Répondre

1

Sans l'aide du modèle fortement typé, ce serait:

var dataType = col.GetReferenced(Column.DataType).First(); 
var dataTypeName = dataType.Name.Parts[0]; 

Le modèle fortement typé peut rendre cela plus facile, bien que. Check out https://github.com/Microsoft/DACExtensions/tree/master/DacFxStronglyTypedModel

+0

Pour une référence future à moi-même et aux autres, si la colonne est de type de données défini par l'utilisateur, le type de données sera à l'index 1, c'est-à-dire Name.Parts [1]; – NoSaidTheCompiler

0

Le code correct doit être:

string dataType = col.DataType; 
+0

Merci, mais il n'y a pas de propriété comme ça dans TSqlObject. – NoSaidTheCompiler