You need to enable JavaScript to run this app. 如何在C#/.NET中通过DataSet获取主键列名?
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#/.NET中通过DataSet获取主键列名?

问题解答

你通过DataTable.PrimaryKey获取主键列的方式本身没有问题,出现PrimaryKeys.Length为0的问题,核心原因出在XML读取环节,而非主键查询逻辑。

问题诱因

  • 你调用ReadXml时指定了XmlReadMode.ReadSchema模式,该模式只会读取XML字符串中自带的Schema约束信息,如果你传入的tableXml里没有通过Schema标签明确声明主键约束,DataSet读入后自然不会生成对应的主键配置。
  • 多数场景下从数据库导出XML、或者程序生成XML时,默认不会把主键约束写入Schema片段,需要手动配置导出规则才会包含。

排查和解决方法

  1. 首先可以先调试查看dataSetUpdate.Tables[0].Constraints集合,如果其中没有IsPrimaryKey属性为true的UniqueConstraint对象,即可确认是XML缺失主键约束导致的问题。
  2. 如果你明确知道对应表的主键列名,可以在读取XML后手动给表设置主键,示例代码如下:
// 替换为你实际的主键列名
dataSetUpdate.Tables[0].PrimaryKey = new DataColumn[] 
{ 
    dataSetUpdate.Tables[0].Columns["PrimaryKeyColumnName"] 
};
  1. 如果你自己控制XML的生成逻辑,可以在XML的Schema片段中添加主键声明,示例如下:
<xs:key name="PK_TableName">
  <xs:selector xpath=".//TableName" />
  <xs:field xpath="PrimaryKeyColumnName" />
</xs:key>

内容的提问来源于stack exchange,提问作者Dilshad Nazir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 13:06:07