2012-08-02 89 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);