【发布时间】:2009-08-11 15:18:23
【问题描述】:
我正在使用 VSTS2008 + C# + .Net 3.0。这是我的代码和来自 ADO.Net 的相关异常。这是我以二进制形式和文本形式输入的两个字符串,有什么想法吗?为什么 ADO.Net 会将两个不同的字符串视为相同?
异常信息:
An unhandled exception of type 'System.Data.ConstraintException' occurred in System.Data.dll
Additional information: Column 'Name' is constrained to be unique. Value '������' is already present.
以二进制形式和文本形式输入字符串:
StackOverflow 无法正确显示我的字符串代码������,这是我在 VSTS 2008 编辑器中实际显示的屏幕快照。
我的代码:
static void Main(string[] args)
{
string[] buf = new string[] { "����", "������" };
CompareInfo ci = System.Globalization.CultureInfo.InvariantCulture.CompareInfo;
ci.Compare(buf[0], buf[1], CompareOptions.IgnoreWidth);
Console.WriteLine (String.Compare(buf[0], buf[1], StringComparison.InvariantCultureIgnoreCase));
DataTable bulkInserTable = new DataTable("BulkRequestTable");
bulkInserTable.CaseSensitive = true;
DataColumn column = null;
DataRow row = null;
// add Keyword column to datatable
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "Name";
column.ReadOnly = true;
column.Unique = true;
bulkInserTable.Columns.Add(column);
foreach (string item in buf)
{
row = bulkInserTable.NewRow();
row["Name"] = item;
bulkInserTable.Rows.Add(row);
}
}
【问题讨论】:
-
你试过测试buf[0]==buf[1]的值吗?我真的不知道字符串中的“�”是怎么回事。
-
感谢 JoshJordan,来自 String.Compare,输出为 0,这意味着它们是相同的。从显示角度(人眼角度)来看,它们是不同的。这是 VSTS 2008 的屏幕快照,有什么想法吗? i28.tinypic.com/2j10ehg.jpg
-
请参考我上面的图片,StackOverflow 无法正确显示。谢谢。
-
好吧,George - 如果 String.Compare 返回 0,这些字符串被认为是相同的,并且尝试将它们都插入到强制唯一约束的列中不应该(也不会)起作用 - 通过设计!
-
嗨,Marc,从显示的角度来看,它们是不同的。这就是为什么我如此困惑。有没有cmets?
标签: c# sql .net visual-studio-2008 ado.net