2013-09-02 3 views
-1

У меня есть ошибка в этом коде. Что должно произойти, если у меня есть два стойла в базе данных, цена стойла должна быть удвоена, но то, что произошло в этом коде, - это если у меня два стойла в базе данных, цена стойла не удваивается, и если у меня будет только один ларек цена стойло 0.Значение не удваивается

public double GetStallPrice(int commtaxno) 
{ 
    try 
    { 
     string query = "SELECT * FROM contract_details WHERE comm_tax_no = " + commtaxno; 
     DatabaseString myConnectionString = new DatabaseString(); 
     OleDbConnection connection = new OleDbConnection(); 
     connection.ConnectionString = myConnectionString.connect(); 
     connection.Open(); 

     OleDbCommand command = new OleDbCommand(); 
     command.Connection = connection; 
     command.CommandText = query; 

     OleDbDataReader stallReader = command.ExecuteReader(); 
     stallReader.Read(); 

     while(stallReader.Read()) 
     { 
      try 
      { 
       string query2 = "SELECT section_ID FROM specific_stall WHERE stall_no = '" + stallReader["stall_no"].ToString() + "'"; 
       OleDbCommand command2 = new OleDbCommand(); 
       command2.Connection = connection; 
       command2.CommandText = query2; 

       OleDbDataReader sectionReader = command2.ExecuteReader(); 
       sectionReader.Read(); 
       sectionid = Convert.ToInt32(sectionReader["section_ID"].ToString()); 

       try 
       { 
        string query3 = "SELECT stall_price FROM stall_sections WHERE section_ID = " + sectionid; 
        OleDbCommand command3 = new OleDbCommand(); 
        command3.Connection = connection; 
        command3.CommandText = query3; 

        OleDbDataReader stallPriceReader = command3.ExecuteReader(); 
        stallPriceReader.Read(); 
        stall_price = Convert.ToDouble(stallPriceReader["stall_price"].ToString()); 
       } 

       catch (Exception c) 
       { 
        MessageBox.Show(c.GetBaseException().ToString()); 
       } 

      } 

      catch (Exception b) 
      { 
       MessageBox.Show(b.GetBaseException().ToString()); 
      } 

      sum_stall_price = sum_stall_price + stall_price; 

     } 

     connection.Close(); 
    } 

    catch (Exception a) 
    { 
     MessageBox.Show(a.GetBaseException().ToString()); 
    } 
    return sum_stall_price; 
} 
+0

Есть ли исключения? И как его инициализировали 'sum_stall_price'? –

ответ

1

Я думаю, что ошибка здесь:

stallReader.Read(); 
while(stallReader.Read()) 

Вы читали первую запись, а затем прочитать вторую, без обработки первого.
Вы должны удалить первую строку и оставить только

while(stallReader.Read()) 

В качестве примечания, вы должны попробовать, чтобы всегда использовать using синтаксис с классами, которые реализуют интерфейс IDisposable. Итак, просто пример:

using (OleDbConnection connection = new OleDbConnection()) 
{ 
    // All the code inside 
} 

Таким образом, вы уверены, что объект правильно выпущен.

И наконец: не составляйте запросы вручную, а используйте параметры вместо этого !!
Использование параметров может избежать SQL-инъекций и многих головных болей из-за числовой (float, double, currency) и преобразования даты!

+0

ладно сэр! благодаря! – user2650781

Смежные вопросы