2016-05-01 8 views
1

SQL CLRのUnicode(ヘブライ語とロシア語のテキスト)との統合に問題があります。どちらSQLCLRでSqlContext.Pipe.Sendを作成する方法procはunicodeで動作しますか?

EXEC dbo.TestProc; 

[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サーバーでストアドプロシージャを実行:テストとして、私は次のCLRストアドプロシージャをVisual Studioで簡単なデータベースプロジェクトを作りましたトレース出力とSQLサーバーメッセージは、英語以外の文字を '????'に置き換えます。

SQLサーバーとC#の両方がユニコードで動作すると思っていました。たとえば、英語以外のテキストをテキストボックスに追加するなど、Windowsフォームプロジェクトでユニコードを使用すると、正常に動作します。

どうすればこの問題を解決できますか?私は行方不明のいくつかの設定はありますか?

この質問は以下に関する:How to pass nvarchar (non-English) to CLR (C#) stored procedure?

+0

私はあなたのコードでテストし、 "????私がデータベースのデフォルトの照合順序を「Hebrew_100_CI_AS」に変更したとしても(これは必要ではないがテストするだけです)、私はこれをさらに明日見ていきます。 –

+0

ああ、関連性がある場合は、私はまた、ヘブライ語の文字だけを含む文字列を送信しようとしました。しかし、ロシア語だけでなく、すべての????を持っていました。問題は、別のコードページを混在させることではありません(私はそれが事であるかどうかわかりません)。 – MASQ

答えて

3

私はこのテストをしている間、あなたが閉じられることはありませんし、は.csファイルを含むタブを再オープンすることを推測しています。あれは正しいですか?ご覧のとおり、Visual Studioはエディタでコードをコンパイルしません。現在編集中のファイルに保存されているコードをコンパイルします。これらは通常100%同じですが、127を超える値に基づいた「文字」については、コードページ/エンコーディングが重要になります。そして明確にするために、C#ファイルのエンコーディング/コードページ、ではなく、データベースのについて説明しています。

問題は、少なくとも私のシステムでは、私はほとんどの米国では "Windows 1252"と思われるデフォルトのエンコーディングです。つまり、このコードをアセンブリにコンパイルすると、エディタの内容がディスクに保存されます。しかし、ファイルエンコーディングはこれらの文字をサポートできませんので、C#ファイルの?になります!はい、コンパイルするコードはではなく、画面に表示されているものがです。しかし、.csファイルを閉じてもう一度開くと表示されます。ヘブライ語とロシア語の両方のテキストはすべて?です。そしてそれが、SQL Serverが印刷を依頼されていることです。 (

  • のUnicode:

    は、ちょうどファイルメニューに移動し、これを修正高度な保存オプション...を選択し、エンコーディングのためのトップのドロップダウンで、どちらかを選択するにはUTF-8シグネチャを持つ) - コードページ65001

    または:

  • ユニコード - コードページ1200これはずのUTF-16リトルエンディアンとしてAVE]

が意図したヘブライ語やロシア語の文字で?を交換してください。ビルドとパブリッシュを行い、それらの文字を意図したとおりに表示できるようになりました。

+1

あなたは、私が閉じた後、コード内のすべての英語以外の文字が「????」に変わるとすぐに、高度な保存オプションを使用すると、SQLが印刷していたものが修正されました。 DebugViewerの設定で行うことが重要です。重要なことは、C#がSQLに正しい文字を送信できることと、英語以外の文字列をデバッグできることです。 – MASQ

関連する問題