写有关在数据库中查询信息的代码,查询表 XX 中ID中是否有 9527 这项,ID已经设置为主键
    
            OracleConnection thisConnection = new OracleConnection(@"Data Source=**;User ID=**;Password=**");
            OracleDataAdapter thisDataAdapter = new OracleDataAdapter("SELECT ID FROM XX", thisConnection);
            OracleCommandBuilder thisBuilder = new OracleCommandBuilder(thisDataAdapter);
            DataSet thisDataSet = new DataSet();
            thisDataAdapter.Fill(thisDataSet, "OOXX");
            
            //设置主键
            DataColumn[] keys = new DataColumn[1];
            keys[0] = thisDataSet.Tables["OOXX"].Columns["ID"];
            thisDataSet.Tables["OOXX"].PrimaryKey = keys;
            
            //查询
            DataRow findRow = thisDataSet.Tables["OOXX"].Rows.Find(9527);  
            
            //判断
            if (findRow == null)
            {
                Console.WriteLine("9527 not found");
            }
            else
            {
                Console.WriteLine("9527 exits");
            }
            thisConnection.Close();
        
请问:
这里设置主键的具体作用?原表中ID已经设置为主键了,为何这里还要设置主键?这里是把 内存中的 表数据 的ID列 设置为主键了吗?临时设置主键还有更简单的方法不?
            
Thanks!

解决方案 »

  1.   

    在将一个单独的 DataColumn 标识为 DataTable 的 PrimaryKey 时,表会自动将列的 AllowDBNull 属性设置为 false,并将 Unique 属性设置为 true。 如果是多列主键,则只有 AllowDBNull 属性自动设置为 false。
      

  2.   

    那么这里为何还要单独标识PrimaryKey呢???原表不设置了主键吗?
      

  3.   

    原表的是原表的,datatable是结果集,和原表不是一回事,假如你的查询语句没有查询主键列那么填充的datatable里面又怎么会有主键列你说是吧