0

SQL:

select * 
from tvideoconference 
where del = 'false' 
and iduserpatient = 0 and startdate >= N'18.02.2013 20:37:07'  
order by startdate 

エラー:

nvarchar データ型を datetime データ型に変換すると、範囲外の値になりました。

de-DEセッションカルチャで以下のメソッドを使用しようとしたときに、このエラーが発生しました。さらに、pl-PL文化en-USでは、この方法は完璧に機能します。

public static DataSet getSpecialistConfs(int iduserspecialist)
{
    DateTime? today = DateTime.Now;
    today = today.Value.AddHours(-today.Value.Hour).AddMinutes(-(today.Value.Minute + 1));
    string sql = "select * from tvideoconference where del='false' and startdate >=N'" + today.Value + "' and iduserspecialist=" + iduserspecialist;
    sql += " order by startdate ";

    return Tools.SQLTools.getDataSet(sql);
}

どうすれば解決できますか?同じ効果で、多くのソリューション(部分文字列、日付形式)を試しました..

4

2 に答える 2

3

どうすれば解決できますか?

最初にパラメーター化された SQL を使用します。クエリ自体に値を含めないでください。パラメータを使用し、それらのパラメータの値を設定します。

何が何であるかは不明Tools.SqlToolsですが、実際にはパラメーター化された SQL を使用する必要があります。そうすれば、最初から値を文字列に変換する必要がないDateTimeため、カルチャやフォーマットが邪魔になることはありません。さらに、 SQL インジェクション攻撃に対して脆弱になることはありません...

DateTime?(さらに、代わりに使用している理由がまったく明確ではありません-nullになる可能性はありDateTimeませんDateTime.Now...そして代わりに使用することを検討する必要がありますDateTime.Today...またはDateTime.UtcNow.Date.)

于 2013-02-18T19:47:23.223 に答える
2

さまざまな設定(言語、日付形式)DateTimeは、SQL Server Management Studioでの表示方法、または文字列をに変換しようとしたときの解析方法にのみ影響しますDateTime

SQLServerでサポートされている形式は多数あります。CASTおよびCONVERTに関するMSDNBooksOnlineを参照してください。これらの形式のほとんどは、使用している設定に依存します。したがって、これらの設定が機能する場合と機能しない場合があります。

これを解決する方法は、SQL Serverでサポートされている(わずかに適合された)ISO-8601日付形式を使用することです。この形式は、SQL Serverの言語と日付形式の設定に関係なく、常に機能します。

SQL ServerでサポートされているISO-8601形式には、次の2つの種類があります。

  • YYYYMMDD日付のみ(時間部分なし)。ここに注意してください:ダッシュはありません!、それは非常に重要です!SQL Serverの日付形式の設定に依存せず、すべての状況で機能するとYYYY-MM-DDは限りません。

また:

  • YYYY-MM-DDTHH:MM:SS日付と時刻の場合-ここに注意してください:この形式にはダッシュがあり(ただし省略できTます)、の日付と時刻の部分の間の区切り文字として固定されていますDATETIME

これは、SQLServer2000以降で有効です。

SQL Server 2008以降とDATEデータ型(-のみDATE-ではありません DATETIME!)を使用している場合は、実際にこのYYYY-MM-DD形式を使用することもでき、SQLServerのどの設定でも機能します。

このトピック全体が非常にトリッキーでやや混乱している理由を私に聞かないでください-それはまさにその通りです。ただし、このYYYYMMDD形式を使用すると、SQL Serverのすべてのバージョン、およびSQLServerの言語と日付形式の設定に問題がないはずです。

于 2013-02-18T20:00:32.470 に答える