Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中将数据从nvarchar转换为varchar#_C#_Database_Encoding_Character Encoding - Fatal编程技术网

C# 在C中将数据从nvarchar转换为varchar#

C# 在C中将数据从nvarchar转换为varchar#,c#,database,encoding,character-encoding,C#,Database,Encoding,Character Encoding,作为我正在执行的集成任务的一部分,我的数据库中有一个类型为nvarchar(30)的列,我需要调用WCF服务并传递此列(以及其他列)中的值,然后这些值将存储在另一个数据库中类型为varchar(30)的列中 我应该怎么做(大概是在调用WCF服务的代码中)才能将我的字符串转换成“varchar友好”字符串 最新消息:还没有出现任何问题。然而,我将通过这项服务进行120000条记录的初始迁移,然后每天通过这项服务推送大约300条新记录。因此,任何形式的人工干预都是非常不可取的,我只是在考虑可能出现的

作为我正在执行的集成任务的一部分,我的数据库中有一个类型为nvarchar(30)的列,我需要调用WCF服务并传递此列(以及其他列)中的值,然后这些值将存储在另一个数据库中类型为varchar(30)的列中

我应该怎么做(大概是在调用WCF服务的代码中)才能将我的字符串转换成“varchar友好”字符串


最新消息:还没有出现任何问题。然而,我将通过这项服务进行120000条记录的初始迁移,然后每天通过这项服务推送大约300条新记录。因此,任何形式的人工干预都是非常不可取的,我只是在考虑可能出现的问题。我无法控制目标数据库(使用VARCHAR列),但是我知道它是SQL Server和C#用于应用程序(不确定它们是否使用ADO.NET)。

如果目标列表示ascii字符,那么只需使用Encoding.Convert方法即可

例如:

Encoding.ASCII.GetString(Encoding.Convert(Encoding.Unicode, Encoding.ASCII, bytes))

如果目标列表示ascii字符,那么只需使用Encoding.Convert方法即可

例如:

Encoding.ASCII.GetString(Encoding.Convert(Encoding.Unicode, Encoding.ASCII, bytes))

无需执行任何操作:.NET中的所有字符串:

  • 当您检索
    NVARCHAR
    列时(我假定使用ADO.NET),您会自动获得一个.NET字符串(UTF-16,任何必要的转换都是自动的)
  • 当您将此.NET字符串存储在
    VARCHAR
    列中时,也会自动执行从UTF-16进行的任何必要转换
有关ADO.NET中Sql Server的数据类型映射的详细信息


您只需确保所有字符串都能完美地从源字符集转换到目标字符集。

您无需执行任何操作:.NET中的所有字符串:

  • 当您检索
    NVARCHAR
    列时(我假定使用ADO.NET),您会自动获得一个.NET字符串(UTF-16,任何必要的转换都是自动的)
  • 当您将此.NET字符串存储在
    VARCHAR
    列中时,也会自动执行从UTF-16进行的任何必要转换
有关ADO.NET中Sql Server的数据类型映射的详细信息


您只需确保所有字符串都能从源字符集完美地转换到目标字符集。

您的问题不在于数据类型,而在于数据。可以存储为nvarchar的所有可能值在varchar中都没有等效值(取决于排序规则)。如果第二个数据库在您的控制下,传递数据的最省事的方法是现在将varchar字段更改为nvarchar


如果您不能这样做,那么您需要在发送数据之前检查数据,以确保它是可以转换的数据。根据您遇到的数据问题的类型,您可能希望删除无法转换的字符或用其他字符替换这些字符,或者将记录放入某种类型的保留表中,而不是将其发送以进行管理性修复。艾哈迈德的建议看起来是有可能的,我还没有尝试过,所以我不知道它是否有效。您可能很幸运,没有任何数据问题(并非所有使用nvarchar的数据库都使用具有适当国家/地区排序规则的varchar不会使用的任何字符),但您必须计划解决该问题。

您的问题不是数据类型,而是数据。可以存储为nvarchar的所有可能值在varchar中都没有等效值(取决于排序规则)。如果第二个数据库在您的控制下,传递数据的最省事的方法是现在将varchar字段更改为nvarchar


如果您不能这样做,那么您需要在发送数据之前检查数据,以确保它是可以转换的数据。根据您遇到的数据问题的类型,您可能希望删除无法转换的字符或用其他字符替换这些字符,或者将记录放入某种类型的保留表中,而不是将其发送以进行管理性修复。艾哈迈德的建议看起来是有可能的,我还没有尝试过,所以我不知道它是否有效。您可能很幸运,没有任何数据问题(并非所有使用nvarchar的数据库都使用varchar和正确的国家/地区排序规则不会使用的任何字符),但您必须计划解决该问题。

UTF-16,根据我刚才添加的链接,我想我应该可以安全地在字符集之间进行转换,因为绝大多数字符集都是纯英语的,但该网站在国际上是可用的,所以如果人们开始输入非英语内容,将会发生什么事,这将是很有趣的。UTF-16,根据我刚才添加的链接,我想我应该可以安全地在字符集之间进行转换,因为绝大多数字符集都是纯英语的,但该网站是国际性的,因此,如果人们开始输入非英语内容,将会发生什么事,这将是很有趣的。我想是Sql Server吧?使用ADO.NET访问数据库?您遇到了哪些具体问题?Mac-我会使用您的解决方案(对我来说最简单:),如果出现问题,我会向您报告。我想是Sql Server吧?使用ADO.NET访问数据库?您遇到了哪些具体问题?Mac-我将使用您的解决方案(对我来说最简单:),如果出现问题,我将向您报告。鉴于我们的目标受众,绝大多数内容都应与varchar兼容。然而,这个网站是国际通用的,所以我会密切关注那些转化率不高的内容,如果/当它出现时,我会跨越这座桥梁。那么当我把我的公司名称写出来的时候呢(❤技术人员)在您的联系方式中?我会说英语,但我仍然喜欢使用非ansi字符。为了吸引目标受众,绝大多数内容都应该与varchar兼容。然而,该网站是国际性的,所以我会密切关注正在转换的内容