如何使SQLCLR存储的proc中的SqlContext.Pipe.Send与Unicode一起工作?

马士基

我在将SQL CLR与unicode(希伯来语和俄语文本)集成时遇到问题。作为测试,我在Visual Studio中使用以下CLR存储过程创建了一个简单的数据库项目:

[Microsoft.SqlServer.Server.SqlProcedure]
public static void TestProc ()
{
    //Console.OutputEncoding = System.Text.Encoding.Unicode;
    Trace.WriteLine("Unicode test: blip");
    Trace.WriteLine("Unicode test: בליפ");
    Trace.WriteLine("Unicode test: Блип");
    SqlContext.Pipe.Send("Unicode test: blip");
    SqlContext.Pipe.Send("Unicode test: בליפ");
    SqlContext.Pipe.Send("Unicode test: Блип");
}

发布到测试数据库并在SQL Server中执行存储过程:

EXEC dbo.TestProc;

跟踪输出和SQL Server消息都将非英语字符替换为'????'。

我以为SQL Server和C#都可以使用unicode。在Windows Forms项目中使用unicode(例如,通过将非英语文本添加到文本框)可以正常工作。

我怎样才能解决这个问题?我缺少某些设置吗?

该问题与以下内容有关:如何将nvarchar(非英语)传递给CLR(C#)存储过程?

所罗门·鲁兹基(Solomon Rutzky)

我猜想在进行此测试时,您从未关闭并重新打开包含.cs文件的选项卡那是对的吗?您会看到,Visual Studio不会在编辑器中编译代码,而是会编译保存在您当前正在编辑的文件中的代码。这些通常是100%相同的,但是当涉及到基于127以上的值的“字符”时,那么代码页/编码就变得很重要。明确地说,我们正在谈论的是C#文件而不是数据库的“编码/代码页”

问题是,至少在我的系统上,并且我怀疑在美国大部分地区,默认编码是“ Windows 1252”。因此,发生的事情是,当您将此代码编译到Assembly中时,编辑器中的内容将保存到磁盘中。但是文件编码不能支持这些字符,因此它们会? 在C#文件中变成是的,正在编译的代码不是您在屏幕上看到的。但是,如果您要关闭.cs文件并重新打开它,则会看到它。希伯来语和俄语文本均为?s。这就是要求SQL Server打印的内容。

要解决此问题,只需转到“文件”菜单,选择“高级保存选项...”,然后在“编码”的顶部下拉菜单中选择以下任一选项:

  • Unicode(带签名的UTF-8)-代码页65001

    或者:

  • Unicode-代码页1200 [此应另存为UTF-16 Little Endian]

将替换为?预期的希伯来语和俄语字符。现在,您可以构建和发布并使这些字符按预期显示。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在linux中,echo和pipe如何与docker一起工作?

来自分类Dev

setState如何与备注中的反应一起工作

来自分类Dev

hashmap如何与Integer作为键一起工作

来自分类Dev

如何使Webpack和Node一起工作?

来自分类Dev

平均负载如何与现代CPU一起工作?

来自分类Dev

JavaScript和JSF如何一起工作?

来自分类Dev

如何配置Spring和Angular一起工作

来自分类Dev

这种起重如何与料斗一起工作?

来自分类Dev

Jruby和OSGi-如何一起工作?

来自分类Dev

如何让Cabal和Nix一起工作

来自分类Dev

如何使onDragListener和onTouchListener一起工作?

来自分类Dev

扭曲如何与原子操作一起工作?

来自分类Dev

如何使Webpack和Node一起工作?

来自分类Dev

如何使Reader和ReaderT一起工作

来自分类Dev

试图了解混杂如何与BlueBird一起工作

来自分类Dev

如何使ExcelDNA与R.Net一起工作

来自分类Dev

我如何让jQuery与我一起工作?

来自分类Dev

如何使Apache POI和JAXB一起工作?

来自分类Dev

spark RangeBetween如何与降序一起工作?

来自分类Dev

Job queue如何与promise一起工作?

来自分类Dev

如何使Tkinter和Selenium一起工作

来自分类Dev

如何使Pynput的线程与转义序列一起工作?

来自分类Dev

std :: cout如何与char指针一起工作?

来自分类Dev

红宝石如何与数组数组一起工作

来自分类Dev

insertOrThrow如何与UNIQUE约束一起工作?

来自分类Dev

Jruby和OSGi-如何一起工作?

来自分类Dev

如何使onDragListener和onTouchListener一起工作?

来自分类Dev

如何让Picasso和OkHttp一起工作?

来自分类Dev

超越如何与隔离范围一起工作