2016-09-13 13 views
0

私は列c1を持つテーブルt1を持っていると仮定します。私は「t1から選択C1」を実行すると、私はADO.Netを使用して、DataColumnに関連付けられたデータベーステーブル名を取得するにはどうすればよいですか?

namespace ConsoleApplication1 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 

      SqlDataAdapter adapter; 
      DataSet dataset = new DataSet(); 
      using (SqlConnection connection 
       = new SqlConnection(@"Persist Security Info=False;Trusted_Connection=True;")) 
      { 

       SqlCommand command = new SqlCommand(
        @"SELECT c1 from t1 where 1 = 0;", connection); 
       connection.Open(); 

       SqlDataReader reader = command.ExecuteReader(); 
       DataTable schemaTable = reader.GetSchemaTable(); 
       Console.WriteLine(reader.GetName(0)); //Name of column 
       foreach (DataRow row in schemaTable.Rows) 
       { 
        //Console.WriteLine(row["TableName"]); 
        foreach (DataColumn column in schemaTable.Columns) 
        { 
         Console.WriteLine(String.Format("{0} = {1}", 
          column.ColumnName, row[column])); 

        } 
       } 


      } 
     } 
    } 
} 

以下のコードを使用してDataTableの/のDataRow /のDataColumnを使用して結果のメタデータを取得することができます。しかし値がBASETABLENAMEが空白のために戻りました。列 'c1'に関連付けられたテーブル 't1'を取得するための他の方法がありますか?ここで

は、上記のコードの出力です:

ColumnName = c1 
ColumnOrdinal = 0 
ColumnSize = 100 
NumericPrecision = 255 
NumericScale = 255 
IsUnique = False 
IsKey = 
BaseServerName = 
BaseCatalogName = 
BaseColumnName = c1 
BaseSchemaName = 
BaseTableName = 
DataType = System.String 
AllowDBNull = True 
ProviderType = 3 
IsAliased = 
IsExpression = 
IsIdentity = False 
IsAutoIncrement = False 
IsRowVersion = False 
IsHidden = 
IsLong = False 
IsReadOnly = False 
ProviderSpecificDataType = System.Data.SqlTypes.SqlString 
DataTypeName = char 
XmlSchemaCollectionDatabase = 
XmlSchemaCollectionOwningSchema = 
XmlSchemaCollectionName = 
UdtAssemblyQualifiedName = 
NonVersionedProviderType = 3 
IsColumnSet = False 

答えて

0

あなたはあなたが探している情報を提供します

schemaTable.TableName

以下のリンクを使用して、テーブル名を取得できます。

https://msdn.microsoft.com/en-us/library/system.data.datatable.tablename(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.data.datarow.table(v=vs.110).aspx

+0

//Console.WriteLine(row["table_name"]); 

はそれを変更してみてくださいをschemaTable.TableNameプロパティは、 'SchemaTable'という文字列を返しますが、期待値 't1'は返しません。これは私がDataTable table = row.Tableを使ったテストコードです。 Console.WriteLine(table.TableName); – QFirstLast

0

あなたはほとんどここにそれを持っているテーブル/列の情報

Select * From INFORMATION_SCHEMA.COLUMNS 
0

すべて取得するには、以下を試してみてください。

Console.WriteLine(row["TableName"]); 
+0

これを実行したとき、System.ArgumentException例外がスローされました。 "追加情報:Column 'TableName'がテーブルSchemaTableに属していません。 – QFirstLast

+0

マッピングの「完全な」画像を得るために必要なことはありますか? 「tableName」ではなく「table_name」でなければならないドキュメントを教えてください。たぶん私の質問に対する答えが書類に書かれています。そして、あなたは鷹の目を持っていなければなりません。あなたは実際にコメントされた作品//Console.WriteLine(row["table_name "])に気づいた。これらすべてのコード行の中にあります。 – QFirstLast

+0

@QFirstLastそれは面白いです。私はVisual Studioの 'schemaTable.Columns'の' List'プロパティを調べることによって "TableName"を見つけました。行のためにサンプルを出して質問を更新できますか?テーブル名は別のプロパティの下に表示されますか? –

関連する問題