ソースコードにアクセスせずに、.NET アプリケーションがどのロケールで実行されているかを確認するにはどうすればよいでしょうか?

StackOverflow https://stackoverflow.com/questions/59013

質問

コンテクスト:私は .NET で書かれたサービスの実行を担当しています。独自のアプリケーション。SQL Server データベースを使用します。これは、ローカル マシンの管理者グループのユーザー メンバーとして実行されました。マシンをドメインに追加する前は問題なく動作していました。

そこで、マシンをドメイン (Win 2003) に追加し、ユーザーを Power Users グループのメンバーに変更しました。

問題:実行しようとする SQL 文の一部は、「魔法のように」スペイン語ローカリゼーション (. ではなく , で浮動小数点数を区切る) になっており、エラーが発生します。

There are fewer columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)

マシンのオペレーティング システムと地域設定は英語です。アプリケーションのプロバイダーに尋ねたところ、次のように言われました。

Looks like you have a combination of code running under Spanish locale, and SQL server under English locale. So the SQL expects '15.28' and not '15,28'

さまざまなレベルでどちらが間違っているように思えます (SQL Server では、引数を区切るためのコンマと浮動小数点数に属するコンマをどのように区別できるのでしょうか?)。

つまり、コードはどこかからスペイン語のロケールを取得しているようです。それが実行されているユーザーなのか、それとも別の場所 (グローバル ポリシーでしょうか?) なのかはわかりません。しかし、問題は

マシン/ユーザー/ドメインベースでローカリゼーションが定義される場所はどこですか?

犯人を探さなければならない場所がすべてわからないので、見つけるのを手伝ってください。

役に立ちましたか?

解決

.NET には 2 種類のローカリゼーションがあり、どちらのカルチャの設定もこれらの変数にあります (内容を確認するには、マシン上で .NET コマンド ライン アプリを起動します)。

System.Thread.CurrentThread.CurrentCulture & System.Thread.CurrentThread.CurrentUICulture

http://msdn.microsoft.com/en-us/library/system.threading.thread_members.aspx

これらは、コントロール パネル (地域設定部分) の設定に関連しています。.NET コマンド ライン アプリを作成し、上記のプロパティに対して ToString() を呼び出すだけで、どのプロパティを確認するかがわかります。

編集:

ユーザーごとのロケールの設定がここに保持されていることがわかります。

HKEY_CURRENT_USER\Control Panel\International

スペイン語ロケールのユーザーのレジストリを調べて、米国または必要なロケールに設定されているユーザーと比較する価値があるかもしれません。

他のヒント

コードが実行されているスレッド コンテキストで設定できます。

System.Threading.Thread.CurrentThread.CurrentCulture

素晴らしいです。コンソール アプリを作成しました。実際、このアプリはおかしなものではありません。CurrentCulture はスペイン語ですが、そのマシンのそのユーザーのみを対象としています。コンソール アプリを別のユーザーとして実行すると、すべての文化で英語が返されます。

ユーザーごとのロケール設定はどこにあるのかという新しい質問を開いたほうがよいでしょうか?

ユーザー固有の場合は、をチェックしてください。 地域と言語のオプション コントロールパネル。

<rant>余談ですが、文字列を使用する際に文化を認識していない開発者を非難してください。</rant>

そのマシンでのみ問題が発生した理由を調べました。実際にそのユーザーでログインしたのはこれだけで、ドメイン コントローラーはそのユーザーの地域設定をスペイン語に設定しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top