当前位置: 首页 > 知识库问答 >
问题:

从C确定SQL字符串等价性#

祁承望
2023-03-14

我有一个C#程序,从文件中读取数据,然后将唯一的字符串插入SQL表(通过System.数据。SqlClient)。问题是,当C#不等效时,SQL认为某些字符串是等效的。

这里有一个例子。假设我的C#程序生成了下面SQL脚本的前两行。显然,C#会认为“2”和“上标-2”是不同的,但是,正如你所看到的,SQL没有:

DECLARE @S1 NVARCHAR(10) = '2';
DECLARE @S2 NVARCHAR(10) = '²';
DROP TABLE IF EXISTS #Test;
CREATE TABLE #Test(S NVARCHAR(10) NOT NULL);
CREATE UNIQUE INDEX I1 ON #Test(S);
INSERT #Test SELECT @S1;
INSERT #Test SELECT @S2;

msg 2601, Level 14, State 1, Line 7无法在对象的dbo中插入重复的键行。#测试'具有唯一索引'I1'。重复的键值是(²)。该语句已被终止。

我可以通过使用C#字符串来解决这个问题。规范化函数,但这实际上改变了字符串,我不喜欢。理想情况下,我能做的就是用C#与SQL相同的方式比较两个字符串。

对此有什么解决办法吗?

我要补充一点:这个练习的全部目的是为了表现。在程序启动时,C#程序将字符串表的当前列表读取到内存中,然后读取数据文件,根据需要将字符串添加到内存表中。读取完所有数据后,将根据SQL从C#执行插入。

顺便说一句,在SSIS中,当查找从文本文件读取的代码并准备SQL插入时,我们也会遇到同样的问题。

共有1个答案

冉伯寅
2023-03-14

我刚刚发现了系统。数据。SqlTypes.SqlString.等于。例如,

var b = SqlString.Equals("2", "²");

这是真的。这并不能解决SSIS部分的问题,但对于C#来说非常有希望。

 类似资料:
  • 问题内容: String[] letters = {“A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “L”}; 为什么是 Fk呀! 输入AL字母之一绝对不会发生? 问题答案: 字符串是对象。所述通过引用,而不是由它们的内部值进行比较的对象。 有两种解决方案: 使用method来比较两个对象的值。 使用代替。这是原始的,因此可以使用。

  • 问题 你要在C和Python直接来回转换字符串,但是C中的编码格式并不确定。 例如,可能C中的数据期望是UTF-8,但是并没有强制它必须是。 你想编写代码来以一种优雅的方式处理这些不合格数据,这样就不会让Python奔溃或者破坏进程中的字符串数据。 解决方案 下面是一些C的数据和一个函数来演示这个问题: /* Some dubious string data (malformed UTF-8) *

  • 本文向大家介绍C#按特定字符分割字符串,包括了C#按特定字符分割字符串的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 我需要生成一个固定长度的文本行: 我现在有的是: 这非常有用,因为生成了一个55个字符的固定长度的字符串。 例如,当可选值为空字符串时,就会出现问题,例如: 在string.format中有空字符串不会给出固定的长度,我仍然需要有30个字符的长度。 任何线索都非常感谢!! 谢谢

  • 我目前正在使用以下连接字符串连接到数据库(数据库与ServerIP在同一台服务器上): 这在asp中使用时连接良好。网(我已经手动创建了dbUserId,并从sql server management studio为其分配了dbUserPassword。dbUserId是数据库“dbName”的所有者) 我在另一台电脑上有一个java swing应用程序,需要连接到同一个数据库。我正在使用sqlj

  • 问题内容: 最好使用内置的“ go”软件包及其一些子软件包(“ go / ast”,“ go / token”,“ go / printer”等)编写输出有效的go代码的go应用程序。 要创建字符串文字表达式,您需要创建一个ast.BasicLit: 在我的go程序中,我有一个字符串,我需要创建一个ast.BasicLit,该ast.BasicLit在输出时将生成一个字符串文字,该文字将忠实地再现