日期:2014-05-18  浏览次数:20683 次

关于(查询数据时临时建立的主键)
写有关在数据库中查询信息的代码,查询表 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!

------解决方案--------------------
探讨

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

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