繁体   English   中英

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

[英]Converting data from nvarchar to varchar in C#

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

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

更新:一切都没有错。 但是,我将通过此服务进行120,000个记录的初始迁移,然后每天将通过该服务推送约300个新记录。 因此,任何人工干预都是非常不可取的,我只是在事先考虑可能出什么问题。 我无法控制目标数据库(带有VARCHAR列),但是我确实知道应用程序是SQL Server和C#(不确定它们是否使用ADO.NET)。

您无需执行任何操作:.NET 中的所有字符串都是UTF-16编码的

  • 当您检索NVARCHAR列时(我假设使用ADO .NET),您会自动获得一个.NET字符串(UTF-16,任何必要的转换都是自动的)。
  • 当将此.NET字符串存储在VARCHAR列中时,也会自动执行从UTF-16进行的任何必要转换。

有关 ADO .NET中Sql Server数据类型映射的更多信息, 请参见此处

您只需要确保可以将所有字符串从源字符集完美转换为目标字符集即可。

如果目标列代表ASCII字符,则只需使用Encoding.Convert方法

例:

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

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

如果不能这样做,则需要在发送数据之前检查数据,以确保它是可以转换的数据。 根据您所遇到的数据问题的种类,您可能希望去除不会转换的字符或将其替换为其他字符,或者将记录放入某种类型的保存表中,而不是手动将其发送以使其固定。 艾哈迈德(Ahmed)的建议似乎有可能,我没有尝试过,所以不知道它是否会起作用。 您可能很幸运,并且没有任何数据问题(并非每个使用nvarchar的数据库都使用具有适当国家/地区归类的varchar不会包含的任何字符),但是您必须为该问题做出计划。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM