p.s*_*w.g 5 .net c# t-sql ado.net
有没有办法使用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 = // ... ?
};
}
}
}
Run Code Online (Sandbox Code Playgroud)
恐怕你无法通过 connection.GetSchema() 确定...
但作为解决方法,您可以尝试使用 dataadapter(如果它适合您):
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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8815 次 |
最近记录: |