2009-07-13 3 views
0

MS SQL 2005 Expressの問題で苦労しています。以下のようなクエリは、Windowsの地域オプション(コントロールパネル)が英語(米国)に設定されているときにはうまく動作しますが、イタリア語(および多分他の言語)に設定すると失敗します。Windowsがイタリア語に設定されていると、SQL Server 2005 Expressは日時フィールドを更新できません。

UPDATE MyTable SET StartDate='2009-07-14 12:05:30' WHERE ID=7 

は、私はまた、ISO 8601など、さまざまな日時形式を試してみました:

yyyy-MM-ddTHH:mm:ss 

(参照:http://www.karaszi.com/SQLServer/info_datetime.asp)をこれらのフォーマットの

なしYYYYMMDDを除いて動作していないが、その後、I許容できない時間を緩める。

SET LANGUAGE us_english 

PS:

はまた最初にこのクエリを実行すると、違いはありません私は、.NETプログラムからクエリを実行しますが、SQL Server Management Studioのは、同じ結果を与える:それはデータに文字列を変換することはできません。 -時間。設定が米国英語に戻されるとすぐに再び動作します。

このクエリは他の言語設定でも使用できますか?

答えて

2

地域に依存しない日付を使用する必要があります。 SQL Serverでは、あなたがこれを行うことができます:コードから

UPDATE MyTable SET StartDate={ts '2009-07-14 12:05:30'} WHERE ID=7 

が、それはさらに良いのは、名前付きパラメータを使用し、パラメータとしてDateTimeオブジェクトを渡すことです。

+0

ありがとうございます! – Roy

1

yyyymmdd hh:mm:ss形式を試しましたか?

UPDATE MyTable SET StartDate='20090714 12:05:30' WHERE ID=7 
+0

申し訳ありませんが動作しませんでしたが、VB.netは ":"を "。"に置き換えたためだと思います。理由は分かりません。 – Roy

0

私は解決策を見いだした。 ISO 8601フォーマットはMS SQLで完璧に動作しますが、VB.netで日付をフォーマットする際に何か問題がありました。

まず私は、次の書式指定子を使用:文字列= aDate.ToStringとして

薄暗い日付ストリングに( "YYYY-MM-DD T HH:MM:SS")

をしかし、何とか結果は "のようなものです「2009-07-14T12:05:30」ではなく「2009-07-14T12.05.30」となりますので、「:」の代わりに点を使用してください!

ストリング= aDate.ToString( "S")

正しいフォーマットが適用されるよう

薄暗い日付ストリングを使用して: "2009-07-14T12:05:30"。