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