gpt4 book ai didi

c# - 通过 GetSchema 确定主键列

转载 作者:太空狗 更新时间:2023-10-29 22:33:03 25 4
gpt4 key购买 nike

有没有办法使用 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 = // ... ?
};
}
}
}

最佳答案

恐怕您无法使用 connection.GetSchema() 确定 ...

但作为一种解决方法,您可以尝试使用数据适配器,如果它适合您的话:

    var da = factory.CreateDataAdapter();
command.CommandText = "select * from Employees";
da.SelectCommand = command;
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;

var dtab = new DataTable();
da.FillSchema(dtab, SchemaType.Source);

foreach (DataColumn col in dtab.Columns)
{
string name = col.ColumnName;
bool isNull = col.AllowDBNull;
bool isPrimary = dtab.PrimaryKey.Contains(col);
}

关于c# - 通过 GetSchema 确定主键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15207045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com