2012-08-02 37 views
0

我在UI中具有這三列。在下拉列表中,我有一個AllRecords和其他一些字段。我選擇AllRecords字段,然後輸入開始和結束日期的詳細信息。如何在C#中編寫IF SQL語句以從數據庫中檢索值

現在我編寫了一個用於檢索值的查詢。

當他選擇AllRecords時,根據開始日期和結束日期,它必須顯示或檢索數據庫表中的數據。

我寫了一個查詢,如果用戶將選擇其他值,它看起來像這樣,

DataTable dt = new DataTable(); 
string queryStr = "SELECT Day,Date,Name,Task,Hours from TaskManualDetails where Date between '" 
    + DateTime.Parse(txtStartDate.Text).ToString("yyyy-MM-dd") 
    + "' and '" 
    + DateTime.Parse(txtEndDate.Text).ToString("yyyy-MM-dd") 
    + "' and Name ='" 
    + DropDownList1.Text.ToString() 
    + "'"; 
SqlDataAdapter s1 = new SqlDataAdapter(queryStr, conn); 
s1.Fill(dt); 

現在的問題是我必須寫查詢AllRecords

+0

當您在SQL Management Studio中執行它時,上面編寫的查詢是否會將任何記錄返回給您?格式化您的SQL查詢的提示。嘗試字符串queryStr = string.format(「SELECT Day,Date,Name,Task,Hours from TaskManualDetails where Date in'{0}'and'{1}'and Name ='{2}'」,DateTime.Parse(txtStartDate .ToString(「yyyy-MM-dd」),DateTime.Parse(txtEndDate.Text).ToString(「yyyy-MM-dd」),DropDownList1.Text.ToString()); – zeencat 2012-08-02 10:43:09

+5

SQL注入很多! – 2012-08-02 10:46:21

+4

您是否聽說過** sql參數**? – 2012-08-02 10:48:48

回答

0

試試這個:

DataTable dt = new DataTable(); 
      string queryStr = "SELECT Day,Date,Name,Task,Hours from TaskManualDetails "; 

      if (DropDownList1.Text.ToString() != "AllRecords") 
      queryStr=queryStr+" where Date between '" + DateTime.Parse(txtStartDate.Text).ToString("yyyy-MM-dd") + "' and '" + DateTime.Parse(txtEndDate.Text).ToString("yyyy-MM-dd") + "'"+" and Name ='" + DropDownList1.Text.ToString() + "'"; 
      SqlDataAdapter s1 = new SqlDataAdapter(queryStr, conn); 
      s1.Fill(dt); 

只有在查詢一個小的變化

你必須追加和Name ='」 + DropDownList1.Text.ToString()到查詢只有當其不AllRecords

+0

在下拉列表中,我有一個「所有記錄」字段。當用戶選擇那個。他希望看到這個細節「SELECT Day,Date,Name,Task,Hours from TaskManualDetails」。問題是我如何檢查他是否在下拉列表中輸入所有記錄。爲此,我想編寫SQL查詢。 – 2012-08-02 11:08:09

+0

@VenkateshChittepu:我更新了我的查詢..你可以通過使用這個條件找到他是否選擇了「所有記錄」DropDownList1.Text.ToString()==「AllRecords」 – 2012-08-02 11:15:36

+0

我聞SQL注入,我同意你只是遵循作者代碼,但如果您可以使用參數並改進代碼,則會更好 – Vamsi 2012-08-02 11:47:32

0

要關心SQL注入使用的SqlParameter這樣的:

DataTable dt = new DataTable(); 
    SqlDataAdapter s1 = new SqlDataAdapter(); 
    s1.SelectCommand.Connection = conn; 
    string queryStr = "SELECT Day,Date,Name,Task,Hours from TaskManualDetails WHERE Date BETWEEN @StartDate AND @EndDate"; 
    s1.SelectCommand.Parameters.AddWithValue("StartDate", DateTime.Parse(txtStartDate.Text).ToString("yyyy-MM-dd")); 
    s1.SelectCommand.Parameters.AddWithValue("EndDate", DateTime.Parse(txtEndDate.Text).ToString("yyyy-MM-dd")); 

    if (DropDownList1.Text.ToString() != "AllRecords") 
    { 
     queryStr = queryStr + " AND Name = @Name"; 
     s1.SelectCommand.Parameters.AddWithValue("Name", DropDownList1.Text.ToString()); 
    } 

    s1.SelectCommand.CommandText = queryStr; 

    s1.Fill(dt);