2017-09-21 135 views
0

我無法弄清楚什麼是錯誤或什麼解決方案可能與我的代碼,它只是給我,它不能將字符串轉換爲整數,當我不使用任何整數字符串 我也無法弄清楚如何編寫日期時間並將其放回到datetimepicker中。從組合框到文本框

private void cbxProducts_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      string constring = "Data Source = (LocalDB)\\MSSQLLocalDB; AttachDbFilename = \"C:\\Users\\hannes.corbett\\Desktop\\Barcode Scanning\\Barcode Scanning\\BarcodeDB.mdf\"; Integrated Security = True"; 
      string Query = "SELECT * FROM Products where Name='" + cbxProducts.Text + "' ; "; 
      SqlConnection conDataBase = new SqlConnection(constring); 
      SqlCommand cmdDataBase = new SqlCommand(Query, conDataBase); 
      SqlDataReader myReader; 
      try 
      { 
       conDataBase.Open(); 
       myReader = cmdDataBase.ExecuteReader(); 

       string sBarcode = myReader.GetString("Barcodes"); 
       string sName = myReader.GetString("Name"); 
       var sDate = myReader.GetDateTime("EDate"); 
       string sQuantity = myReader.GetInt32("Quantity")).ToString(); 
       string sPrice = myReader.GetInt32("Price")).ToString(); 
       tbxBar.Text = sBarcode; 
       tbxName.Text = sName; 
       sDate = dateDate.Value; 
       tbxPrice.Text = sPrice; 
       tbxQua.Text = sQuantity; 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

編輯:Error Message

編輯2:我收到錯誤消息

「無效嘗試讀取時沒有數據可用」

我有數據在我的數據庫中的所有字符串,但我仍然得到這個錯誤

+1

您能否提供確切的錯誤信息? 我認爲要麼'string sQuantity = myReader.GetInt32(「Quantity」))。ToString();'或'string sPrice = myReader.GetInt32(「Price」))。ToString();'是錯誤的。 檢查你的數據庫中有哪些數據類型。 –

+1

有了這個信息,我們只能猜測。我的猜測是,價格或數量或兩者都不是整數。 – Crowcoder

+0

無法從字符串轉換爲int是我獲得當我盤旋,但我不能運行的代碼,因爲「條碼」,所有這些都是用紅色加下劃線 –

回答

0

像這樣使用字段名它應該與列名一起工作,或者如果你想使用columnIndex,按照@MtwStark在他的答案中描述的方式進行。

string sBarcode = myReader["Barcodes"].ToString(); 
string sName = myReader["Name"].ToString(); 
var sDate = myReader["EDate"]; 
string sQuantity = myReader["Quantity"].ToString(); 
string sPrice = myReader["Price"].ToString(); 

關於以下錯誤消息

「無效嘗試讀取時沒有數據可用」

你必須調用myReader.Read()第一。 (就像有人在this question中詢問)

while (myReader.Read()) { 
    //do here whatever you want with the records returned from myReader 
    string sBarcode = myReader["Barcodes"].ToString(); 
    string sName = myReader["Name"].ToString(); 
    var sDate = myReader["EDate"]; 
    string sQuantity = myReader["Quantity"].ToString(); 
    string sPrice = myReader["Price"].ToString(); 
    ... 
} 
+0

當我這樣做myReader得到的下劃線閱讀,它說「方法名稱預期」 –

+0

固定...它工作? – MatSnow

+0

修正它,所以我可以運行的代碼,但我得到的錯誤 「C#無效的嘗試,當沒有數據可用時,」當我嘗試從我的組合框中選擇「 –

2

,你必須使用索引列沒有名稱的

string sBarcode = myReader.GetString(IndexOfBarcodesColumn); 

像這樣

string sBarcode = myReader.GetString(0); 
string sName = myReader.GetString(1); 
var sDate = myReader.GetDateTime(2); 
string sQuantity = myReader.GetInt32(3).ToString(); 
string sPrice = myReader.GetInt32(4).ToString(); 

,或者你可以直接從讀者

string sBarcode = myReader.Item["Barcodes"]; 
string sName = myReader.Item["Name"]; 
var sDate = myReader.Item["EDate"]; 
string sQuantity = myReader.Item["Quantity"]; 
string sPrice = myReader.Item["Price"]; 
+0

好吧,我'新的數據庫做事情,所以我如何找到不同列的索引? –

+1

如果您使用'SELECT * FROM Products',則列的順序是數據庫中創建的順序,但是您可以使用類似'SELECT Barcodes,Name,EDate,Quantity,Price FROM Products'的順序獲取列所以條形碼將有索引0,名稱索引1等.. – MtwStark

+0

如果這回答你的問題,請接受答案 – MtwStark