0

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

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

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

VALUES 句で指定された値よりも INSERT ステートメントの列が少ない。VALUES 句の値の数は、INSERT ステートメントで指定された列の数と一致する必要があります。System.Data.SqlClient.SqlConnection.OnError (SqlException 例外、ブール値の breakConnection) で

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

スペイン語ロケールで実行されているコードと、英語ロケールでの SQL サーバーの組み合わせがあるようです。したがって、SQL は「15,28」ではなく「15.28」を想定しています。

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

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

マシン/ユーザー/ドメインごとにローカリゼーションが定義されている場所は?

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

4

5 に答える 5

3

.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

スペイン語のロケールでユーザーのレジストリを調べて、米国または必要なロケールに設定されているユーザーのレジストリと比較することをお勧めします。

于 2008-09-12T14:02:34.070 に答える
1

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

System.Threading.Thread.CurrentThread.CurrentCulture

于 2008-09-12T14:02:26.677 に答える
0

すばらしい、私はコンソールアプリを作成しました。実際、アプリはクレイジーではありません。CurrentCultureはスペイン語ですが、そのマシンのそのユーザーのみが対象です。別のユーザーとしてコンソールアプリを実行すると、すべてのカルチャで英語が返されます。

ユーザーごとのロケール設定はどこにあるかを尋ねる新しい質問を開く必要がありますか?

于 2008-09-12T14:21:35.227 に答える
0

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

<rant>ちなみに、文字列を使用するときに文化を認識していないことで開発者を蹴ってください。</ rant>

于 2008-09-12T14:35:52.320 に答える
0

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

于 2008-09-12T14:42:50.057 に答える