【发布时间】:2013-02-18 20:45:37
【问题描述】:
有没有办法使用 ADO.NET GetSchema 方法来确定列是否为主键?
这是我目前得到的:
public IEnumerable<DbColumnInfo> GetColumns(string providerName, string connectionString, string tableName)
{
DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);
using (DbConnection connection = factory.CreateConnection())
using (DbCommand command = factory.CreateCommand())
{
connection.ConnectionString = connectionString;
connection.Open();
command.Connection = connection;
var columns = connection.GetSchema("Columns", tableName.Split('.'));
foreach (DataRow row in columns.Rows)
{
yield return new DbColumnInfo()
{
Name = row.Field<string>(3),
OrdinalPosition = row.Field<short>(4),
DataType = this.FormatDataType(row),
IsNullable = string.Equals(row.Field<string>(6), "yes", StringComparison.InvariantCultureIgnoreCase),
IsPrimaryKey = // ... ?
};
}
}
}
【问题讨论】:
-
您必须使用 GetSchema 还是愿意使用常规查询?当您展开表的列节点并从中调整查询时,我使用 Sql Profiler 来跟踪 Sql Management Studio 所做的事情。明天上班的时候,如果对你有用的话,我会发上来的。
-
@pswg 我知道这已经一岁了,但我很好奇你是否有一个体面的
FormatDataType实现,你愿意分享一个要点或其他东西,或者就此而言查看和/或您最终提出的其他提供程序代码? -
@qes 最后我决定使用 SQL 查询而不是 ADO 来获取我需要的信息。请参阅下面的答案。