通过DataTable获得表的主键

  很多情形下我们需要知道表的主键是什么。在ADO.Net中提供了DataTable可以映射数据库的表。于是便可以利用DataTable的属性PrimaryKey,它是DataColumn[] 类型是一个数组。我们可以使用如下的代码

   DataColumn[] cols;
   cols = Table.PrimaryKey;
 //注意不是cols是DataColumn数组,不是DataColumn变量。这样做主要是为了处理联合主键的问题。
   for(int i = 0; i < cols.Length; i++)
   {
          MessageBox.Show(cols[i].ColumnName);
   }

  按理这个问题就已经解决了,但是cols.Length却是0。原来在默认的情况下填充DataTable时并没有从数据库中取的主键的信息。如何获得主键呢?经过研究发现在填充Dataset的时候可以使用DataAdapter的MissingSchemaAction属性帮助我们解决这个问题,于是有如下的代码:

    //使用DataAdapter填充DataTable
    dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    dataadapter.Fill(Table);

    DataColumn[] cols;
    cols = Table.PrimaryKey;
    //注意不是cols是DataColumn数组,不是DataColumn变量。这样做主要是为了处理联合主键的问题。
    for(int i = 0; i < cols.Length; i++)
    {
        MessageBox.Show(cols[i].ColumnName);
    }

  这样我们便可以如愿以偿了。MissingSchemaAction属性是确定现有Dataset(或DataTable)架构与传入数据不匹配时需要执行的操作。MissingSchemaAction.AddWithKey是枚举值,它的作用是添加必需的列和主键信息以完成架构,利用它用户可以在每个 DataTable上显式设置主键约束。

时间: 2024-11-03 16:14:44

通过DataTable获得表的主键的相关文章

SQL Server表的主键设计应注意的问题

关于数据库的逻辑设计,是一个很广泛的问题.本文主要针对开发应用中遇到在MS SQL Server上进行表设计时,对表的主键设计应注意的问题以及相应的解决办法. 主键设计现状和问题 关于数据库表的主键设计,一般而言,是根据业务需求情况,以业务逻辑为基础,形成主键. 比如,销售时要记录销售情况,一般需要两个表,一个是销售单的概要描述,记录诸如销售单号.总金额一类的情况,另外一个表记录每种商品的数量和金额.对于第一个表(主表),通常我们以单据号为主键;对于商品销售的明细表(从表),我们就需要将主表的单

讨论SQL Server 表的主键问题

关于数据库的逻辑设计,是一个很广泛的问题.本文主要针对开发应用中遇到在MS SQL Server上进行表设计时,对表的主键设计应注意的问题以及相应的解决办法. 主键设计现状和问题 关于数据库表的主键设计,一般而言,是根据业务需求情况,以业务逻辑为基础,形成主键. 比如,销售时要记录销售情况,一般需要两个表,一个是销售单的概要描述,记录诸如销售单号.总金额一类的情况,另外一个表记录每种商品的数量和金额.对于第一个表(主表),通常我们以单据号为主键;对于商品销售的明细表(从表),我们就需要将主表的单

架构师-我在设计一个表结构.主键生成策略选择哪种好,有什么讲究吗?

问题描述 我在设计一个表结构.主键生成策略选择哪种好,有什么讲究吗? 选uuid? 还是选数字自增? 一般情况下都用哪个啊? 一般情况下都用哪个啊? 一般情况下都用哪个啊? 解决方案 主键一般都是非业务主键,仅作编号没有实际意义,自增或者UUID都可以的.比较如下: 解决方案二: 数字自增长 一直用的这种,还不错.

java-问题 如何用Java程序实现,父表的主键插入到子表的外键中?

问题描述 问题 如何用Java程序实现,父表的主键插入到子表的外键中? 需求从excel导入数据到mysql数据库,然后父表的主键是自增列,插入数据同时把主键插入子表的外键中(我已经把主表的数据插入了)

mysql数据库表里面有一个属性映射到另外两个表的主键,hibernate的配置文件如何写

问题描述 mysql数据库表里面有一个属性映射到另外两个表的主键,hibernate的配置文件如何写 就是说有一个反馈信息的表,里面有一个属性useridOrclubid 是映射到社团表主键clubid 和用户表主键userid 的.我应该怎么样配置hbm.xml文件 解决方案 http://stackoverflow.com/questions/4089539/hibernate-use-two-foreign-keys-for-different-coloumnshttp://stackov

sql server-sqlserver建表时主键忘加一属性

问题描述 sqlserver建表时主键忘加一属性 现在想修改但是有其他表的外键关联了,请问怎么办,新手求助~~ 解决方案 先取消关联,再修改,再加上就是了. 解决方案二: 对,值没有改变,所以可以先取消,然后加上主键后,在关联没问题 解决方案三: 取消关联,修改属性,添加关联

c# 数据库-c#sqlserver 怎么让2个表的主键(ID)相同呢?

问题描述 c#sqlserver 怎么让2个表的主键(ID)相同呢? c#sqlserver 怎么让2个表的主键(ID)相同呢 ? 解决方案 既然主键相同,何不放入一个表,建议看看范式 解决方案二: 额....相同的话就不用2个表了吧,主键是唯一标识的

多个字段筛选数据-一个表没有主键,怎么通过表中的2个或多个字段进行数据筛选查询

问题描述 一个表没有主键,怎么通过表中的2个或多个字段进行数据筛选查询 表如图,表中有3个字段,但不没有主键,我希望查询出pid不等于1并且name不等于n2的记录,期望的结果如下: pid name value 1 n1 1 1 n3 1 2 n2 2 2 n4 3 解决方案 SELECT * FROM demo where pid<>1 and name<>'n2' 解决方案二: 哥 你这条语句只筛选出了我不希望要的数据, 我要的数据是这样,排除掉pid = 1 并且 name

深入讨论SQL Server 表的主键问题

关于数据库的逻辑设计,是一个很广泛的问题.本文主要针对开发应用中遇到在MS SQL Server上进行表设计时,对表的主键设计应注意的问题以及相应的解决办法. 主键设计现状和问题 关于数据库表的主键设计,一般而言,是根据业务需求情况,以业务逻辑为基础,形成主键. 比如,销售时要记录销售情况,一般需要两个表,一个是销售单的概要描述,记录诸如销售单号.总金额一类的情况,另外一个表记录每种商品的数量和金额.对于第一个表(主表),通常我们以单据号为主键;对于商品销售的明细表(从表),我们就需要将主表的单