0

(管理スタジオから) SQL データベースで次のスクリプトを実行すると、期待どおりの結果が得られます。

SELECT * 
FROM [Case] 
WHERE ABS((DATEDIFF(DAY, [DateAccident], '2013-01-01'))) < 100;

値 100 を増減すると、期待どおりに一致する数が増えたり減ったりします。

ただし、WinForms アプリ (C#) から同じ結果を生成しようとすると、必要以上の結果が得られます -

public static DataTable DOACases(DateTime doa, int days)
{
    try
    {
        DataTable table = new DataTable();
        string sqlText = "SELECT * " +
                         "FROM [Case] " +
                         "WHERE ABS((DATEDIFF(DAY, [DateAccident], " + doa.ToString().Substring(0,10) + "))) < " + days.ToString() + ";";
        SqlCommand sqlCom = new SqlCommand(sqlText);
        table = Express.GetTable(sqlCom);
        return table;
    }
    catch (Exception eX)
    {
        throw new Exception("Case: DOACases(Date)" + Environment.NewLine + eX.Message);
    }
}

何故かはわからない

PS。Express.GetTable(sqlCom) は、データベースへの接続と、DataReader を使用して DataTable を埋めるために必要なコードを作成するだけで、何百回も機能しているので、問題があるとは思えません。

4

2 に答える 2

0

パラメータを使用する方が良いですが、ここで問題は

'" + doa.ToString("yyyy-MM-dd" , CultureInfo.InvariantCulture) + "'

一重引用符が必要です

于 2013-10-18T13:54:55.090 に答える