2016-11-26 64 views
0

我試圖捕獲數據庫中兩個日期之間的數據。日期時間解析查詢

當我嘗試在SQL Server Management Studio中執行此查詢時,它工作正常。

SELECT 
    cha_tarihi 
FROM 
    CARI_HESAP_HAREKETLERI 
WHERE 
    ha_tarihi BETWEEN '2016-02-10' AND '2016-10-10'; 

但是,當我想嘗試在我的C#項目中,它不工作,不返回數據庫中的任何數據。

我想約兩個小時,請幫助是什麼問題?

查詢在我的C#項目

var editeddate = DateTime.ParseExact(
    dateEdit1.EditValue.ToString(), 
    "d.M.yyyy hh:mm:ss", CultureInfo.InvariantCulture 
); 

var editeddate2 = DateTime.ParseExact(
    dateEdit2.EditValue.ToString(), 
    "d.M.yyyy hh:mm:ss", CultureInfo.InvariantCulture 
); 

query.Sql = 
    @"select cha_tarihi from CARI_HESAP_HAREKETLERI where cha_tarihi between '" + 
    editeddate.ToString("yyyy-MM-dd") + 
    "' AND '" + 
    editeddate2.ToString("yyyy-MM-dd") + 
    "'"; 
+4

停止建設你的SQL這樣的。改用參數化查詢。這可能是也可能不是問題,但它絕對是第一件要做的事情。 –

+0

關鍵字'SQL注入' – NtFreX

+0

爲什麼要格式化日期兩次?不太確定結果會是什麼。看看editdate中的內容(它已經是一個字符串).toString(「yyyy-MM-dd」)。 – Sparky

回答

1
var sql = @"SELECT cha_tarihi 
      FROM CARI_HESAP_HAREKETLERI 
      WHERE cha_tarihi BETWEEN @startdate AND @enddate"; 

var command = new SqlCommand(sql, {your connection}); 

// You have EditValue.ToString() - what is the type of this value? 
// You maybe be able to skip the DateTime.Parse 
command.Parameters.Add("@startdate", SqlDbType.DateTime2) 
        .Value = DateTime.Parse(dateEdit1.EditValue) 
            .ToString("yyyy-MM-dd"); 
command.Parameters.Add("@enddate", SqlDbType.DateTime2) 
        .Value = DateTime.Parse(dateEdit2.EditValue) 
            .ToString("yyyy-MM-dd"); 
+1

你需要在你的SQL字符串(而不是''')中使用'@'前綴... –

+0

@marc_s thanks! – Prescott