2014-09-06 74 views
-1

我從通過此方法發送日期 WPFModelClass顯示日期.......只能從SQL數據庫

private void buttonNTSave_Click(object sender, RoutedEventArgs e) 
{ 
    ModelClass model = new ModelClass(); 
    model.TaskInsertion(textBoxNTSubject.Text, textBoxNTType.Text, Convert.ToDateTime(datePickerNT.SelectedDate), textBoxNTTitle.Text, textBoxNTDetail.Text); 
} 

日期正在插入數據庫這種方法...

public void TaskInsertion(string subject, string type, DateTime dueDate, string title, string detail) 
{ 
    SqlConnection conn = new SqlConnection(connectionString); 
    try 
    { 
     string query = "INSERT INTO Tbl_Task (Email, Subject, Type, DueDate, Title, Detail) VALUES ('" + userEmail + "', '" + subject + "' , '" + type + "', '" + dueDate.Date + "', '" + title + "', '" + detail + "')"; 

     SqlCommand cmd = new SqlCommand(query, conn); 
     conn.Open(); 
     cmd.ExecuteNonQuery(); 
    } 

    catch (Exception e) 
    { 
     conn.Close(); 
    } 
} 

但每當我試着只檢索日期從數據庫到DataGrid中,仍然是時間日期正顯示出..

public DataTable OverDueCurrentTask() 
{ 

    SqlConnection conn = new SqlConnection(connectionString); 
    try 
    { 

     DateTime DateToday = DateTime.UtcNow.Date; 
     string query = "DECLARE @sDate Date SET @sDate = '" + DateToday.Date + "' SELECT Title, Subject, Type, DueDate FROM Tbl_Task WHERE DueDate >= @sDate"; 

     SqlCommand cmd = new SqlCommand(query, conn); 
     conn.Open(); 
     cmd.ExecuteNonQuery(); 

     SqlDataAdapter dataAdp = new SqlDataAdapter(cmd); 
     DataTable dataTbl = new DataTable("Tbl_Task"); 
     dataAdp.Fill(dataTbl); 
     dataAdp.Update(dataTbl); 
     return dataTbl; 

    } 

    catch (Exception e) 
    { 

     conn.Close(); 
     return null; 

    } 
} 

如何顯示日期而不顯示時間? N.B.在數據庫中,DueDate是日期類型列。

+0

儘管插入查詢正在工作,但我會建議使用SqlCommand參數。謹防SQL注入攻擊。 – Hassan 2014-09-06 16:08:37

+0

完全同意@Hassan進行sql注入。關於返回給客戶端的值,這是一個格式問題。所以,我認爲將這個任務委託給應用層(離前端最近)會更好。在這種情況下,您可以顯示'.ToShortDateString()'值 – 2014-09-06 16:33:45

回答

0

你需要投DueDatecast([DueDate] as date) > = @sDate。而sDate已被宣佈爲date

string query = @"DECLARE @sDate Date SET @sDate = '" + DateToday.Date + "' 
       SELECT Title, Subject, Type, cast([DueDate] as date) as DueDate FROM Tbl_Task 
       WHERE cast([DueDate] as date) >= @sDate"; 

儘管它完成了答案,但您需要對代碼進行微妙的更改,以避免SQL注入攻擊。使用SqlCommand Parameters。在代碼中添加using塊。

0

我相信你也可以在C#中做到這一點。在SQL查詢中,你可以使用:

select cast([date] as date) as dateonly 

要將datetime轉換爲date

下面編輯由丹·古斯曼提供:

的C#代碼來構建應用程序所需的查詢字符串:

string query = "DECLARE @sDate Date SET @sDate = '" + DateToday.Date + "' SELECT Title, Subject, Type, CAST(DueDate AS date) AS DueDate FROM Tbl_Task WHERE DueDate >= @sDate;"; 
+0

您能準確地提供完整查詢以僅從數據庫檢索日期嗎?我不擅長SQL。 – Nafees 2014-09-06 16:09:08