2013-03-01 3 views
2

В winform Я пытаюсь сравнить возвращаемое значение набора данных с определенным значением, но я получаю следующую ошибку.Сравнение значения набора данных

Visual Studio Error

В коде ниже, я передаю строку из выпадающего списка методу GetStock

public bool checkStock() 
     { 
      foreach (var listBoxItem in listBox1.Items) 
      { 
       if (Convert.ToInt32(GetStock(listBoxItem.ToString())) == 0) 
       { 
        MessageBox.Show(listBoxItem.ToString() + " not in Stock!. Please delete the item before proceeding"); 
        return false; 
       } 
      } 
      return true; 
     } 

Код для GetStock()

public DataSet GetStock(string product) 
     { 
      DataSet dataSet = new DataSet(); 
      OleDbConnection oleConn = new OleDbConnection(connString); 

      try 
      { 
       oleConn.Open(); 
       string sql = "SELECT [Quantity] FROM [Product] WHERE [Product Name]='" + product + "'"; 
       OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, oleConn); 
       dataAdapter.Fill(dataSet, "Product"); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.ToString()); 
      } 
      finally 
      { 
       oleConn.Close(); 
      } 
      if (dataSet.Tables["Product"].Rows.Count <= 0) 
       return null; 

      return dataSet; 
     } 

    } 
} 

В базе данных "Количество" находится в строчном формате.

ответ

4

GetStock возвращает DataSet но вы передаете его Convert.ToInt32:

if (Convert.ToInt32(GetStock(listBoxItem.ToString())) == 0) 

Вы, вероятно, хотите что-то вроде этого:

int stockCount = GetStockQuantity(listBoxItem.ToString()); 
if (stockCount == 0) 
{ 
    MessageBox.Show(listBoxItem.ToString() + " not in Stock!. Please delete the item before proceeding"); 
} 

Вот модифицированный метод (обратите внимание, что я использую параметры)

public int GetStockQuantity(string product) 
{ 
    int quantity = 0; 
    string sql = "SELECT TOP 1 [Quantity] FROM [Product] WHERE [Product Name] = ?"; 
    using(var oleConn = new OleDbConnection(connString)) 
    using(var cmd = new OleDbCommand(sql , oleConn)) 
    { 
     cmd.Parameters.AddWithValue("?", product); 
     try 
     { 
      oleConn.Open(); 
      object obj_quantity = cmd.ExecuteScalar(); 
      if(obj_quantity != null) 
       // "In database the "Quantity" is in string format." 
       // Change it to int if possible 
       int.Parse((string)obj_quantity); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 
    } 
    return quantity; 
} 
+0

, но здесь я имею в виду 0, когда величина становится 0 –

+0

@AmritSharma: Под редакцией мой ответ, хотя, на мой взгляд, лучше вернуть пустой 'DataTable' или' DataSet'. Поскольку вы выбираете одну таблицу, я бы вместо этого возвращал DataTable, DataSet предполагает, что он содержит (или может содержать) несколько таблиц. –

+0

реализовало ваше решение, но код возвращает true, хотя я задал количество как 0 в базе данных –

1

GetStock метод возвращает DataSet, но вам нужно фактическое значение int. Попробуйте это:

Convert.ToInt32(GetStock(listBoxItem.ToString()).Tables["Product"].Rows[0]["Quantity"]) 
0

попробовать этот способ:

var count = GetStock(listBoxItem.ToString()); 

if (count > 0) 
{ 
    //TODO: other stuff 
} 
else 
{ 
    MessageBox.Show(listBoxItem.ToString() + " not in Stock!. Please delete the item before proceeding"); 
} 
Смежные вопросы