2013-10-27 4 views
0
"SELECT SUM(Cost) FROM Repair WHERE RepairDate BETWEEN '" + startdate + "' AND '" + enddate + "'"; 

모두 안녕하세요. 매개 변수가있는 쿼리로 변경하는 것 외에이 SQL에 문제가 있습니까? 내가 ExecuteScalar는하려고 할 때,이 기준에서 나에게 표현의 오류 데이터 형식이 일치를 제공합니다 : 내 창에서내 WCF 서비스 응용 프로그램의 SQL

public int TotalRepairCost(DateTime startdate, DateTime enddate) 
{ 
     int total; 
     OleDbConnection oleConn = new OleDbConnection(connString); 

     oleConn.Open(); 

     string sql = "SELECT SUM(Cost) FROM Repair WHERE RepairDate BETWEEN '" + startdate + "' AND '" + enddate + "'"; 

     OleDbCommand cmd = new OleDbCommand(sql, oleConn); 

     total = (int)cmd.ExecuteScalar(); 

     oleConn.Close(); 
     return total; 
} 

버튼

private void btnTotal_Click(object sender, EventArgs e) 
{ 
     DateTime startdate = Convert.ToDateTime(txtStartDate.Text); 
     DateTime enddate = Convert.ToDateTime(txtEndDate.Text); 
     lblTotal.Text = client.TotalRepairCost(startdate, enddate).ToString(); 
} 

enter image description here enter image description here

enter image description here

+1

내 생각에 날짜 형식에 문제가있는 것 같습니다. – germi

+0

@germi 감사합니다 germi, 내 데이터베이스의 RepairDate 열에 대한 데이터 형식은 날짜/시간이며, 날짜를 입력 할 때 시작일은 "10/10/2012"이고 종료일은 "10/10/2013"입니다. , "10/10/2012 10:00:00 AM" – Mindless

+0

@yzwboy와 같은 다른 옵션도 시도했습니다.이 쿼리를 사용하여보십시오 : 'string sql = "SELECT SUM (Cost) FROM RepairDate BETWEEN'"+ startdate.ToString (" yyyy-MM-dd HH : mm : ss ") +" 'AND'+ enddate.ToString ("yyyy-MM-dd HH : mm : ss") + " '";' – kmatyaszek

답변

2

를 클릭하여 양식을 당신 명령 매개 변수 (msdn)와를 사용해야합니다. total 유형의 경우

public decimal TotalRepairCost(DateTime startdate, DateTime enddate) 
{ 
    decimal total; 
    OleDbConnection oleConn = new OleDbConnection(connString); 

    oleConn.Open(); 
    string sql = "SELECT SUM(Cost) FROM Repair WHERE RepairDate BETWEEN @StartDate AND @EndDate"; 

    OleDbCommand cmd = new OleDbCommand(sql, oleConn); 
    cmd.Parameters.Add("@StartDate", OleDbType.Date); 
    cmd.Parameters["@StartDate"].Value = startdate; 

    cmd.Parameters.Add("@EndDate", OleDbType.Date); 
    cmd.Parameters["@EndDate"].Value = enddate; 

    total = (decimal)cmd.ExecuteScalar(); 

    oleConn.Close(); 
    return total; 
} 
+0

결정된 – Mindless

관련 문제