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