3

SQL Server データベースを使用する C# プログラムを持っています。小数点として。今、小数点記号として , を使用する別の国で使用したいと考えています。

C# では、同じデータベースと同じプログラムを使用できるように、コードを変更または記述できるアプリケーション レベルの設定がありますか? または、この新しい小数点記号を処理するためにコード全体を変更する必要がありますか?

これがどのように機能するのかわかりません.基本的に、My Sqlクエリに問題があると思います. たとえば、私の既存のステートメントの1つが

insert into tblproducts(productId,Price) values('A12',24.10)

今、新しい国でそれはなるでしょう

insert into tblproducts(productId,Price) values('A12',24,10)

これはエラーになります

この状況を処理するには、コード全体を変更する必要がありますか?

ありがとうございました

4

3 に答える 3

1

文字列連結を使用してクエリを作成した場合は、代わりにパラメーターを使用してください。したがって、書く代わりに:

 var query = "insert into tblproducts(productId,Price) values('" + article + "','"
    + price + ')';

OleDbParametersを使用します。

 var query = "insert into tblproducts(productId,Price) values(?,?)"
 var cmd = new OleDbCommand(query, connection);
 cmd.Parameters.Add("@article", OleDbType.VarChar).Value = article;
 cmd.Parameters.Add("@price", OleDbType.Single).Value = price;

これにより、ローカリゼーションの問題を含む多くの問題を解決できます。

于 2008-12-09T17:46:46.557 に答える
0

これを修正するためにいくつかのことを行うことができます。

まず、インターフェイスから値を取得している場合、これらの値を 10 進数にキャストしています。Decimal.parse はカルチャに依存する関数であり、現在のカルチャを使用して値を解析します。したがって、CurrentCulture がカンマを小数点記号として使用する場合、キャストは適切に機能します。次に、変数から値を出力するときに、小数点としてピリオドを常に使用して出力するように decimal.ToString 形式を指定できます。

あ、付け忘れ。通貨を示すように解析を変更することもできます。これにより、コンマと $ 記号が許可されます。例: decimal.parse(amount, NumberStyles.Currency)

于 2008-12-09T17:44:53.847 に答える
0

global.asax.vb ファイルで、現在のページ ロードのカルチャを設定できます。

Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture

これにより、カルチャに対応したすべての機能が適切に機能します。たとえば、(5000.25).ToString() は、設定したカルチャに応じてコンマとピリオドを使用します。また、ユーザーから数値型への入力の読み取りは、カルチャ ルールに従って解析されます。日付は正しく表示されます (12/9/08 対 9/12/08)。基本的にすべて無料で利用できます。

これは明らかに、同じカルチャ内のすべてを期待している他のシステムと通信するときに問題を引き起こします。これを解決するには、インバリアント カルチャを使用してクエリを記述します。

(5000.25).ToString(CultureInfo.InvariantCulture) 

これにより、その出力が Mysql が対応できるものに明示的に設定されます。

注: 適切なデータ層があり、それに数値型を渡せば、おそらくこの混乱の多くを回避できます。

于 2008-12-09T17:46:19.957 に答える