カルチャが異なる場合のDateクラスのToStringメソッド結果がSQL文で使えない
- 題名: カルチャが異なる場合のDateクラスのToStringメソッド結果がSQL文で使えない
- 著者: kane123
- 日時: 2014/02/01 13:31:35
- ID: 32125
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: カルチャが異なる場合のDateクラスのToStringメソッド結果がSQL文で使えない
- 著者: YuO
- 日時: 2014/02/01 14:53:27
- ID: 32126
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: カルチャが異なる場合のDateクラスのToStringメソッド結果がSQL文で使えない
- 著者: kane123
- 日時: 2014/02/01 16:30:29
- ID: 32127
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: カルチャが異なる場合のDateクラスのToStringメソッド結果がSQL文で使えない
- 著者: 魔界の仮面弁士
- 日時: 2014/02/02 2:47:38
- ID: 32128
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: カルチャが異なる場合のDateクラスのToStringメソッド結果がSQL文で使えない
- 著者: kane123
- 日時: 2014/02/02 12:05:26
- ID: 32129
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
いつもお世話になっております。 DateクラスのTostringメソッドが使えない状況に出くわし、 解決策を考えています。 状況としては、OSの地域と言語(すなわちアプリのメインのスレッドのカルチャ)が ドイツ語(ドイツ)や英語(英国)だった場合、ToStringメソッドが 2.1.2014 や 2/1/2014 を返して来ます。ここで問題になるのが、VBソース内にあるベタ書きSQL文にて、 これらが含まれてしまった場合、DB側でエラーになることです。 DB側は en-US や ja-JP でのTostring結果: 2014/1/2 なら 受け入れるようです。(おそらくDBの照合順序が JAPANESE_CI_AI であるのと関係があるかも知れません。) そこで、カルチャに依存しない、DateクラスからのSQL文に適合した 文字列への変換が無いものかと考えたのですが、Dateクラス自身には そのようなメソッドは無いように見え、自作の関数で解決すること にしました。 ここで悩ましいのですが、以下の2つのどちらで行こうかということです。 Public Function DATE_EN_US(ByVal d As Date) As String System.Threading.Thread.CurrentThread.CurrentCulture = Globalization.CultureInfo.GetCultureInfo("en-US") Dim t As String = d.ToShortDateString System.Threading.Thread.CurrentThread.CurrentCulture = Globalization.CultureInfo.GetCultureInfo([アプリ起動時のカルチャ]) Return t End Function Public Function DATE_EN_US_2(ByVal d As Date) As String Return d.Year.ToString + "/" + d.Month.ToString + "/" + d.Day.ToString End Function 前者は、カルチャの一時的変更、後者は文字列連結です。 この関数は極めて高頻度で呼び出されるので、カルチャの変更というのを、そう 頻繁に行っていいのか、という不安があります。 また、この関数はグローバル展開する業務アプリのフレームワーク的な部分に なってくるので、上の二つのうちより良い方を、もしくは第三のやり方があるのなら それに決めたい、という背景があります。 宜しくお願いします。 ※SQLClientのSQLCommandにパラメータで代入する、というやり方は度外視します。 すでに大量のベタ書きSQLがソース内にあり、それら全てのパラメータ付きSQL文への リファクタリングは今から考えられないためです。