2
我有一个DataTable与3x字符串列,一个约束,我试图用唯一的行填充它。第一行很好地添加,但不幸的是,当我尝试添加第二个具有唯一值的值时,我收到一个错误的约束错误消息。ForeignKeyConstraint:与空字符串和空白错误匹配
我已经将我的自定义类级别提升到了最小值,并在尝试添加它们之前为这两个值添加了额外的检查,但结果是矛盾的。
这里有云:
using System.Data;
using System.Collections;
namespace DataTableForeignKey
{
public class Symbols : IEnumerable
{
protected DataTable fTable = new DataTable();
protected DataColumn fCategoryColumn = new DataColumn("Category", typeof(string));
protected DataColumn fNameColumn = new DataColumn("Name", typeof(string));
protected DataColumn fValueColumn = new DataColumn("Value", typeof(string));
public Symbols()
{
fTable.Columns.Add(fCategoryColumn);
fTable.Columns.Add(fNameColumn);
fTable.Columns.Add(fValueColumn);
// Temporarily disabled
//fTable.Constraints.Add(new ForeignKeyConstraint(fNameColumn, fCategoryColumn));
fTable.Constraints.Add(new ForeignKeyConstraint(fValueColumn, fCategoryColumn));
}
public virtual void Add(string aCategory, string aName, string aValue)
{
var lRow = fTable.NewRow();
lRow[fCategoryColumn] = aCategory;
lRow[fNameColumn] = aName;
lRow[fValueColumn] = aValue;
fTable.Rows.Add(lRow);
}
IEnumerator IEnumerable.GetEnumerator()
{
return fTable.Rows.GetEnumerator();
}
}
class Program
{
static void Main(string[] args)
{
var lSymbols = new Symbols();
var lWhitespace = " ";
var lEmptyString = string.Empty;
if (lWhitespace != lEmptyString)
{
lSymbols.Add("Whitespace", "Separator", lWhitespace);
lSymbols.Add("Prefix", "Command", lEmptyString);
// The second Add() throws the following exception:
// System.Data.ConstraintException: 'Column 'Value' is
// constrained to be unique. Value '' is already present.'
}
}
}
}
如何空字符串匹配一个空白?
非常感谢您提前给出答案。
这是正常行为,ms sql server遵循ANSI 92规范https://support.microsoft.com/zh-cn/help/316626/inf-how- SQL服务器,比较弦,与尾随-空间。最有意思的是 - 你不能通过任何SET语句覆盖这样的行为 – vitalygolub
为什么要用来自同一个表的列添加外键约束?我有点惊讶,它可以让你做到这一点。 – Crowcoder
感谢vitalygolub。显然我必须重新设计我的代码。 :( – Tony