有没有一种纯粹的.net方法可靠地做到这一点?我一直在寻找的解决方案需要猜测,或者他们有专门针对数据库提供商的解决方案。通常查询一些内部系统表来获取这些信息。如何使用ado.net查找表的主键列?
4
A
回答
4
每个DataTable对象都有一个PrimaryKey属性,这是一个DataColumns数组,代表表的主键。
例如:
string[] GetPrimaryKeys(SqlConnection connection, string tableName)
{
using(SqlDataAdapter adapter = new SqlDataAdapter("select * from " + tableName, connection))
using(DataTable table = new DataTable(tableName))
{
return adapter
.FillSchema(table, SchemaType.Mapped)
.PrimayKey
.Select(c => c.ColumnName)
.ToArray();
}
}
1
只需添加到伊戈尔的答案。您实际上不需要查询整个数据子集,只需使用adapter.FillSchema(table,SchemaType.Mapped),然后从数据表中获取主键。
(如果你使用SQL虽然,你可以从系统的角度让他们虽然,但我假设你已经知道了。)
2
唯一的途径[错]作为伊戈尔在评论中提到,你可以调用FillSchema的()这里有一个链接... FillSchema()
是查询数据库的架构信息,这将取决于数据库供应商...
这是SQL Server特定的,例如...
select kcu.TABLE_SCHEMA, kcu.TABLE_NAME,
kcu.CONSTRAINT_NAME, tc.CONSTRAINT_TYPE, kcu.COLUMN_NAME, kcu.ORDINAL_POSITION
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS as tc
join INFORMATION_SCHEMA.KEY_COLUMN_USAGE as kcu
on kcu.CONSTRAINT_SCHEMA = tc.CONSTRAINT_SCHEMA
and kcu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
and kcu.TABLE_SCHEMA = tc.TABLE_SCHEMA
and kcu.TABLE_NAME = tc.TABLE_NAME
where tc.CONSTRAINT_TYPE in ('PRIMARY KEY', 'UNIQUE')
order by kcu.TABLE_SCHEMA, kcu.TABLE_NAME,
tc.CONSTRAINT_TYPE, kcu.CONSTRAINT_NAME, kcu.ORDINAL_POSITION;
0
只是标记到此查询上。在ADO.Net中有一种方法可以从一系列表中提取通用的(即独立于数据库供应商的)模式。我正在思考的不仅是列名,类型和主键(我知道这很容易获得),还包括外键集合。我可以很容易地使用sqlserver2005特定的逻辑来完成所有这些工作,但是很想看到一个与数据库无关的对象模型方法。
我都会看着这个空间:)
好运大师......
0
有一个图书馆,Kailua - The forgotten methods in the ADO.NET API.,这并不前五名供应商提供这个和额外的元数据。此信息是供应商特定的。
相关问题
- 1. 如何查找表A的主键具有外键约束的表的列表?
- 2. 查找表和使用主键
- 3. 如何找出表的主键使用的是何种选择查询
- 4. 带多列查找的主键
- 5. 在oracle中查找表中的主键
- 6. 查找后没有使用主键
- 7. 如何查找DB2中表的主键的名称和值
- 8. 在View中查找主键列
- 9. 在列表中查看两列主键
- 10. 如何找到选择列表的主键
- 11. 如何列出SQL Server表的主键?
- 12. 如何使用查找表?
- 13. 使用复合主键查询表格
- 14. 如何使用列表查询查找表?
- 15. MySQL:如何查找某个特定主键在其他表中的外键?
- 16. 如何使用C#和ADO.NET查询类型为SDO_GEOMETRY的空间列的Oracle表?
- 17. 使用python如何根据作为内部列表元素的键在列表列表中查找元素?
- 18. 按值查找列表的关键字
- 19. 如何在Oracle SQL表中获取未使用/可用主键(主键范围从1到999)的列表?
- 20. 如何使用Retrieve或SQL查找UniVerse中的列列表?
- 21. 通过查询获取表主键列
- 22. 使用嵌入式主键列表查询
- 23. 如何使用主键和静态列更新Cassandra表?
- 24. 如何使用ADO.NET获取表中列的SqlDbType?
- 25. ADO.NET MVC查询外键
- 26. 如何检索ADO.NET 4中的主键元数据?
- 27. 如何查找ID不在主ID表
- 28. 如何使一个表的主键,同一表的外键
- 29. Python列表(查找与键值+检查,如果存在的话)
- 30. ADO.NET实体框架 - 复合主键CRUD
有趣的是,我没有使用数据表,因为这涉及到sql命令,但它确实看起来像我可以创建一个数据表来获取主键信息。 – 2008-12-16 19:24:22
如何调用FillSchema()?这样可行! – 2008-12-16 19:33:46