Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于PrimaryKey的DataTable异常_C#_.net - Fatal编程技术网

C# 关于PrimaryKey的DataTable异常

C# 关于PrimaryKey的DataTable异常,c#,.net,C#,.net,我使用DataTable用翻译词典中的数据填充网格视图,字面意思是使用以下代码的词典: 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

我使用DataTable用翻译词典中的数据填充网格视图,字面意思是使用以下代码的
词典

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”
,但没有一个键是相同的-这是合乎逻辑的,因为它们是从字典中读取的。

事实上,通过仔细查看,我找到了拼图中缺失的部分。字典以区分大小写的方式按值比较字符串,但DataTable对象以不区分大小写的方式按值比较字符串。

触发器是一个误用的全小写资源键,导致字典中同时存在键“evaldate”和“evaldate”。它还解释了异常不稳定的原因,只有在测试期间访问某个页面时才会发生异常。

抛出的异常具体是什么?
System.Data.ConstraintException
:“列'key'被约束为唯一的。值'evalDate'已经存在。”我不认为
字典
通过引用来比较键,但是关于区分大小写的问题,您可能是正确的。默认情况下,
DataTable
使用不区分大小写的比较: