2014-01-21 1 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 단어를 추가 할 것인가? 그래서 직원 코드는 사용자가 선택한 것이고 어디서나 데이터를 선택하십시오. –

+0

'BETWEEN'을 사용하십시오. 'Time = @ Time' 또는'Time = @ Time2'와 같은 항목을 제외 시키려면이'WHERE' 절만을 사용하십시오. –

+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); 
관련 문제