2014-01-21 3 views
0

Я хотел бы выполнить поиск по двум датам, две даты будут выбраны пользователем через календарь. Это, как я написал запрос:выберите все записи между двумя датами с использованием календаря

public List<Staff> GetStaff(DateTime DateOne, DateTime DateTwo, string staffColourCode) 
{ 
    List<Staff> l= new List<Staff>(); 
    SqlConnection conn = new connection etc... 
    SqlCommand command = new SqlCommand("SELECT * FROM TableName WHERE CAST(Time AS date) BETWEEN @Time and @Time", conn); 
    command.Parameters.AddWithValue("@Time", DateOne); 


    conn.Open(); 
    SqlDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) 
    { 
     Staff s= new Staff(); 
     s.Name= reader["Name"].ToString(); 
     etc... 

     l.Add(s); 
    } 
    conn.Close(); 
    return l; 
} 

В моей базе данных, если я заменить время с какой-то датой, то она работает, но как я написать запрос, который позволяет пользователям выбрать один из двух дат и на основе DateOne и поиск DateTwo список сотрудников, у которого есть цветовой код того, что пользователь выбирает, например Зеленый, желтый и т.д. ...

+2

Ну, вы в настоящее время используете 'BETWEEN @Time AND @ Time' - наверняка вы хотите * два разных * параметра, один для начала и один для конца ... –

+0

Использовать' BETWEEN @fromDate AND @ toDate' –

ответ

0

в комментарии выше заявили, вы только используя одну из ваших параметров

public List<Staff> GetStaff(DateTime DateOne, DateTime DateTwo,string color) 
{ 
    //Some connection stuff 
    SqlCommand command = new SqlCommand(@"SELECT * FROM TableName 
              WHERE CAST(Time AS date)> @Time 
              and CAST(Time AS date)< @Time2 
              and staffColorCode = @color", conn); 
    command.Parameters.AddWithValue("Time", DateOne); 
    command.Parameters.AddWithValue("Time2", DateTwo); 
    command.Parameters.AddWithValue("color", color); 

    //retrieve data 
} 

дополнительный параметр добавлен

+0

Я еще не тестировал, но я думаю, что это то, что я хочу. Заключительный вопрос: как добавить другое слово WHERE, поэтому выберите данные From и To, где пользовательский цветовой код является тем, что выбрано пользователем. –

+0

Используйте «МЕЖДУ». Используйте этот оператор WHERE, если вы хотите исключить записи, в которых «Time = @ Time» или «Time = @ Time2». –

+0

просто добавьте еще и предложение в утверждение, см. Измененный ответ @ThorstenDittmar, который вы исправляете, но я предпочитаю писать его таким образом, так как он позволяет вам проще прокомментировать строку, если требуется, также показывает, как и утверждения могут быть связаны – RoughPlace

2

Вам нужны два разных параметра:

SqlCommand command = new SqlCommand("SELECT * FROM TableName " + 
            "WHERE CAST(Time AS date) BETWEEN @DateOne and @DateTwo", conn); 
command.Parameters.AddWithValue("@DateOne", DateOne); 
command.Parameters.AddWithValue("@DateTwo", DateTwo); 
Смежные вопросы