2017-08-31 105 views
1

我通常在VB中做到這一點,它更容易,這是我第一次在C#中,我無法弄清楚。我只是想讀取一行,檢查其是否具有行和分配中存在的該列StockQuanSQL查詢結果給變量?

public int StockQuan; 
    public int NewAmount; 

    public const string ConnectionStringToORACLE = "Provider=OraOLEDB.Oracle.1;Data Source=Souarce;User ID=user;Password=pass;"; 
    public OleDbDataReader rowread; 

    public OleDbDataReader Read_quan(string txtPartNo, int txtAmount) 
    { 
     var conn = new OleDbConnection(ConnectionStringToORACLE); 
     conn.Open(); 

     string query = "select QUANTITY_IN_STOCK from MPCS.SHOP_INV_STOCK where SI_KEY = ? AND LOCATION = ?"; 
     var cmd = new OleDbCommand(query, conn); 

     cmd.Parameters.AddWithValue("SI_KEY", txtPartNo); 
     cmd.Parameters.AddWithValue("LOCATION", "HQ-TC"); 

     //rowread = cmd.ExecuteReader(); 
     //rowread.Read(); 
     //if (rowread.HasRows) 
     //{ 
      //while (rowread.Read()) 
      //{ 
       StockQuan = (int)cmd.ExecuteScalar(); 
      //} 
      NewAmount = StockQuan - txtAmount; 

     //} 
     //else 
     //{ 
     // MessageBox.Show("Error reading quantity. Check with Administrator", "Error", MessageBoxButton.OK, MessageBoxImage.Warning); 
     //} 
     return rowread; 
    } 

我註釋掉大部分事物的數量,只是簡化我要去哪裏錯了,現在錯誤是(int)cmd.ExecuteScalar();

+0

會發生什麼,如果你運行上面的代碼並沒有匹配的記錄(即返回0行)? – mjwills

+1

_您執行SQL的方式確實有效,但您可以考慮使用輕量級的ORM,例如https://github.com/StackExchange/Dapper。它可能會讓你的生活變得更輕鬆一些._ – mjwills

+0

DB中QUANTITY_IN_STOCK的類型是什麼? –

回答

3

無效的轉換嘗試以下

StockQuan = Convert.ToInt32(cmd.ExecuteScalar()); 
+1

就是這樣。謝謝你指出。 – Lee

+1

@Boneist我是這樣做的,但是當我這樣做時,我被告知必須等待10分鐘,然後將其標記爲正確答案。 – Lee