2013-08-28 9 views
0

데이터를 업데이트하는 동안 오류가 발생합니다. 쿼리 식의 구문 오류 (누락 된 연산자) . 여기 쿼리 식의 구문 오류 (누락 된 연산자) '[코드] IN ('

private void UpdateQuantity() 
     { 
      int index = 0; 

      string command = "UPDATE [Seranne] SET [Quantity] ='" + newVal + "' WHERE [Code] IN("; 

      OleDbConnection conn = new OleDbConnection(connectionString); 

      conn.Open(); 

      OleDbCommand cmd = new OleDbCommand(command, conn); 

      cmd.Parameters.Add("Quantity", System.Data.OleDb.OleDbType.Integer); 

      OleDbDataReader dReader = cmd.ExecuteReader(); 

      while (dReader.Read()) 
      { 
       if (textBoxQuantityContainer[index].Value != 0 && textBoxQuantityContainer[index].Value >= Convert.ToDecimal(dReader["Quantity"].ToString())) 
       { 
        newVal = Convert.ToDecimal(dReader["Quantity"].ToString()) - textBoxQuantityContainer[index].Value; 
       } 

       System.Media.SoundPlayer sound = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Notify.wav"); 
       sound.Play(); 
       MessageBox.Show("Updated Successfully", "Success"); 

       index += 1; 
      } 

      conn.Close(); 
      dReader.Close(); 
     } 

이전입니다 : 여기

OleDbDataReader dReader = cmd.ExecuteReader(); 

오류가 표시되는 함수의 전체 코드입니다 : "여기

난에서 오류가 점점 오전 코드입니다 코드 "쿼리 IN"쿼리 식 :

string query = "SELECT [Quantity], [Description], [Price] FROM [Seranne] WHERE [Code] IN ("; 

       OleDbConnection conn = new OleDbConnection(connectionString); 

       conn.Open(); 

       if (int.TryParse(this.textBoxCodeContainer[0].Text, out codeValue)) 
       { 
        query = query + codeValue.ToString(); 
       } 

       for (int i = 1; i < 17; i++) 
       { 
        if (int.TryParse(this.textBoxCodeContainer[i].Text, out codeValue)) 
        { 
         query = query + "," + codeValue.ToString(); 
        } 
       } 

       query = query + ")"; 

       OleDbCommand cmd = new OleDbCommand(query, conn); 

       cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer); 
       cmd.Parameters.Add("Quantity", System.Data.OleDb.OleDbType.Integer); 

       OleDbDataReader dReader; 

       dReader = cmd.ExecuteReader(); 

       while (dReader.Read()) 
       { 
        if (textBoxCodeContainer[index].TextLength != 0) 
        { 
         this.textBoxQuantityContainer[index].Maximum = Convert.ToDecimal(dReader["Quantity"].ToString()); 
         this.textBoxDescContainer[index].Text = dReader["Description"].ToString(); 
         this.textBoxSubTotalContainer[index].Text = dReader["Price"].ToString(); 
        } 

        index += 1; 
       } 

       conn.Close(); 
       dReader.Close(); 

감사합니다.

+0

당신의 질의는 완전한 문자열이 아닙니다. command = "UPDATE [Seranne] SET [Quantity] =" "+ newVal +" '[Code] IN ("; –

답변

2

은 OK, 당신의 코드를 유지하고이 변경 : 당신은 더 나은 textBoxCodeContainer 값에서 정수 목록을 만들 진행하기 전에

for (int i = 1; i < 17; i++) { 
    if (int.TryParse(this.textBoxCodeContainer[i].Text, out codeValue)) 
    { 
     query = query + codeValue + ","; 
    } 
} 
query = query.TrimEnd(',') + ")"; 
+0

나는 당신의 제안을 사용했다. 그러나 그것은 나에게 오류를 준다 :'쿼리 에러에서 구문 오류 (연산자가 빠짐) : [코드] IN ('') 0'. 그리고 'WHERE [코드] IN (' "및'query = query +" ') "'를 사용하면 오류가 발생합니다 :'데이터 유형 불일치' –

+0

@FuhansPujiSaputra 왜 '0' 후에? 내 대답에있는 코드를주의 깊게 보아주십시오. –

+0

나는 그게 정확히 프로그램의 오류와 똑같은 것을 알고 있습니다. –

1

을, 정수 다음

string command = "UPDATE [Seranne] SET [Quantity] =? WHERE [Code] IN(" + string.Join(", " , integers) +")"; 

로 말을 생성 정수리스트는 다음과 같습니다.

List<int> integers = new List<int>(); 
foreach (var tb in textBoxCodeContainer) 
{ 
    int codeValue; 
    if (int.TryParse(tb.Text, out codeValue)) 
    { 
     integers.Add(codeValue); 
    } 
} 
+0

''textBoxCodeContainer values ​​중에서 정수 목록 만들기 '의 예를 들어 주시겠습니까? 나는이 일에 새로운 사람이다. 감사합니다. –

+0

Hai Damith, 코드 덕분에, 완벽하게 작동합니다! 많이 고마워요.하지만 당신이 저에게 준 코드를이 수량 (수량)으로 바꿉니다. SET [Quantity] = "newVal +"및 newVal에 대한 변수 : newVal = textBoxQuantityContainer [index] .Value - Convert.ToDecimal (dReader [ "Quantity"]. ToString()); 수량의 가치는 여전히 100입니다. 프로그램에서 값을 10으로 변경하고 업데이트하면 데이터베이스에 값이 성공적으로 업데이트되고 값이 변경되지만 값은 0 (90으로 가정 됨)입니다. 왜냐하면 newVal에있는 코드이기 때문입니다. 결과는 0이 될 것입니다. –

관련 문제