ForeignKeyConstraint:与空字符串和空格的错误匹配

时间:2017-06-09 11:25:54

标签: c# database string

我有一个带有3x字符串列的DataTable,一个约束,我试图用唯一的行填充它。第一行很好地添加,但不幸的是,当我尝试添加具有唯一值的第二行时,我收到错误约束错误消息。

我已经将我的自定义类提炼到最小值,并在尝试添加它们之前添加了对这两个值的额外检查,但结果是矛盾的。

这就是:

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.'
            }
        }
    }
}

空字符串如何与空格匹配?

非常感谢你提前给出答案。

1 个答案:

答案 0 :(得分:1)

您要找的是UniqueConstraint。因此,您可以将该行代码更改为:

fTable.Constraints.Add(new UniqueConstraint(new DataColumn[] { fValueColumn, fCategoryColumn}));