C#数据表主键问题

标签 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) + 
           " 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;

现在使用完全相同的选择语句..如果我在填充数据表之前将主键添加到数据表中,它就可以正常工作。我很困惑。

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

最佳答案

检查空格,这是一个具有唯一值(但有一个空格)的示例,它将重现问题:

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"    
}

关于C#数据表主键问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2874775/

相关文章:

c# - 在 JSON 转换期间过滤掉某些子对象

c# - C#中的分组事件

c# - 将新实体插入到具有标识主键的上下文中

c# - 如何在 C# 中创建 DataTable 以及如何添加行?

c# - 使用 LINQ 或 Entity Framework 拆分数据表以列出对象 C#

c# - 自动突出显示文本框控件中的文本

c# - 连接丢失后自动重新连接到 MySql

javascript - YUI 数据表数据源是否适用于所有有效的 JSON 对象?

sharepoint - SPGridView、数据及确保数据安全的正确方法

angular - 如何使用ngx-datatable实现服务器端分页+服务器端排序