关于PrimaryKey的DataTable神秘的ConstraintException

时间:2013-05-30 18:06:04

标签: c# .net

我正在使用DataTable使用翻译词典中的数据填充网格视图 - 使用以下代码实际上是Dictionary<string, string>

var dt = new DataTable();
dt.Columns.Add("key", typeof(string));
dt.Columns.Add("value", typeof(string));
dt.PrimaryKey = new DataColumn[] { dt.Columns[0] };
foreach(var key in localizer.Keys)
{
    var row = dt.NewRow();
    row[0] = key;
    row[1] = localizer[key];
    dt.Rows.Add(row); // this line throws an error even though identifiers are ascii
                      // and contain no spaces
}

我尝试在循环之后创建主键约束,但随后它抛出另一个异常,指出该列包含不唯一的值。它停止的值是"evalDate",还有另外两个类似的键"evalDateStart""evalDateEnd",但没有一个是相同的 - 这是合乎逻辑的,因为它们是从字典中读取的。

1 个答案:

答案 0 :(得分:1)

实际上通过调查一下,我找到了拼图的缺失部分。字典以区分大小写的方式按字符串比较字符串,但DataTable对象以不区分大小写的方式按字符串比较字符串。
触发器是一个误用的资源键,全部小写,导致键'evaldate'和'evalDate'都存在于字典中。它还解释了为什么异常不稳定,只有在测试期间访问某个页面时才会发生。