我有一个C#程序,该程序正在从文件中读取数据,然后将唯一的字符串插入到SQL表中(通过System.Data.SqlClient)。问题在于,SQL认为某些字符串在C#不等效时是等效的。
这是一个例子。假设我的C#程序在下面生成了SQL脚本的前两行。显然,C#会认为“ 2”和“上标2”是不同的,但是,正如您所看到的,SQL不会:
regex_patterns = [
re.compile(r'aether?,|altitude?,|aphelion?,|apside?,|apsis?,|ascension?,|autumnal equinox?,|east?.|eastward?,|eclipse?,|ecliptic?,|elliptical?,|epicycle?,|equinoctical?,|exquinox?,|fixed star?,|latitude?,|longitude?s|mean ecliptic?,|meridian?,|mobile star?,|node?,|nodes?,|north?,|octant?,|orbit?,|\borbital?,|\bparallax?,|\brays?,|\bretrograde?,|rise?,|sidereal?,|sidereal position?,|solstice?,|south?,|star?,|vernal equinox?,|west?,')
]
消息2601,级别14,状态1,第7行无法在其中插入重复的密钥行 具有唯一索引“ I1”的对象“ dbo。#Test”。重复的键值为 (²)。该声明已终止。
我可以通过使用C#String.Normalize函数来解决该问题,但这实际上会更改字符串,我并不热衷。我理想地能够做的就是以与SQL相同的方式比较C#中的两个字符串。
有什么解决办法吗?
我应该补充:此练习的全部目的是表现。程序启动时,C#程序将字符串表的当前列表读取到内存中,然后读取数据文件,并根据需要将字符串添加到内存表中。读取所有数据后,将根据SQL从C#执行插入。
顺便说一句,当执行从文本文件读取的代码查找并为SQL准备插入时,我们在SSIS中也遇到同样的问题。
答案 0 :(得分:1)
我刚发现System.Data.SqlTypes.SqlString.Equals。例如,
var b = SqlString.Equals("2", "²");
是真的。这不能解决问题的SSIS部分,但是对于C#来说非常有希望。