C# c数据表主键问题

C# c数据表主键问题,c#,datatable,C#,Datatable,所以我在Oracle数据库中有一个表,我基本上是在C中复制它的主键。我可以很好地加载该表,但当我尝试添加与oracle表相同的主键约束时,会出现以下错误: "These columns don't currently have unique values". 这是密码 DataTable dt = new DataTable(combine(owner, name)); string q = "select " + getColumnSelect(owner, name) +

所以我在Oracle数据库中有一个表,我基本上是在C中复制它的主键。我可以很好地加载该表,但当我尝试添加与oracle表相同的主键约束时,会出现以下错误:

"These columns don't currently have unique values".
这是密码

DataTable dt = new DataTable(combine(owner, name));
string q = "select " + getColumnSelect(owner, name) + 
           " from " + combine(owner, name) + " " + 
           (where_clause ?? "") + " order by " + getOrderByKeys(owner, name);

// load the data table
OracleDataAdapter oda = new OracleDataAdapter(q, conn);
oda.FillLoadOption = LoadOption.PreserveChanges;
dt.BeginLoadData();
oda.Fill(dt);
dt.EndLoadData();

// now set primary keys
List<DataColumn> cols = new List<DataColumn>();
foreach (string key in getKeys(owner, name))
{
    cols.Add(dt.Columns[key]);
}


// This is where it fails
dt.PrimaryKey = cols.ToArray();

return dt;
现在使用完全相同的select语句。。如果在填充datatable之前将主键添加到datatable中,它就可以正常工作。我被难住了

编辑:我忘了补充一点,这适用于同一个表,当然不同的数据在另一个数据库上。我验证了非工作数据库中的数据是唯一的。

当您没有在数据库中添加PK时,getKeysowner,name返回什么


我什么也猜不到

检查空格,下面是一个示例,它有唯一的值,但其中一个示例有一个空格将重新创建问题:

DataTable dt = new DataTable("Hello world");
dt.Columns.Add("Col1");
dt.Rows.Add("Val1");
dt.Rows.Add("Val1 ");
dt.Rows.Add("Val3");
List<DataColumn> cols = new List<DataColumn>();

cols.Add(dt.Columns["Col1"]); 

try
{
    dt.PrimaryKey = cols.ToArray();
}
catch (Exception e)
{
    // Throws "These columns don't currently have unique values"    
}

它正确返回主键。我在那里设置了一个断点,因为我认为这可能是问题所在。捕捉得好。这确实是问题所在。看起来我将手动填充数据表。