2017-05-18 3 views
0

SSDTプロジェクトでは、DacFx APIを使用して、データベースのメモリモデルでクエリを実行しています。私は列の型を取得しようとしていますが、それを理解することはできません。どのようにこれを行うことができる任意のアイデア?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 
        } 
       } 
      } 
     } 

答えて

1

強く型付けされたモデルを使用しない、それはなるだろう:

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

強く型付けされたモデルは、これは簡単に作ることができ、しかし、。チェックアウトhttps://github.com/Microsoft/DACExtensions/tree/master/DacFxStronglyTypedModel

+0

自分自身と他の人への今後の参考として、columnがユーザ定義のデータ型である場合、datatypeNameはインデックス1になります。つまりName.Parts [1]です。 – NoSaidTheCompiler

0

正しいコードは次のようになります。

string dataType = col.DataType; 
+0

ありがとうございますが、TSqlObjectのようなプロパティはありません。 – NoSaidTheCompiler

関連する問題