2015-12-30 27 views
-1

我的代碼是做什麼的,我從它想除了它顯示了一個錯誤「輸入字符串的不正確的格式」這條線:da.SelectCommand.Parameters.AddWithValue("@isbn", Convert.ToDecimal(cboISBN.SelectedValue.ToString())) 這裏我將提供一些更多的代碼,所以這將是可以理解的,什麼我這樣做的:輸入字符串的格式不正確?但

Private Sub cboISBN_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboISBN.SelectedIndexChanged 
    Try 
     If (cboISBN.SelectedIndex <> -1) Then 
      da = New SqlDataAdapter("SELECT isbn FROM book WHERE isbn [email protected]", cn) 
      da.SelectCommand.Parameters.AddWithValue("@isbn", Convert.ToDecimal(cboISBN.SelectedValue.ToString())) 
      dt = New DataTable 
      da.Fill(dt) 
      If dt.Rows.Count > 0 Then 
       da = New SqlDataAdapter("SELECT no_of_books FROM book WHERE isbn [email protected]", cn) 
       da.SelectCommand.Parameters.AddWithValue("@isbn", Convert.ToDecimal(cboISBN.SelectedValue.ToString())) 
       dt = New DataTable 
       da.Fill(dt) 
       TxtNo_of_Books.Text = dt.Rows(0).Item("no_of_books") 
      End If 
     End If 
    Catch ex As Exception 
     MessageBox.Show("Not Completed Because OF The Following Error " & "%" & ex.Message & "%", "Error", _ 
         MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End Try 
End Sub 

我提供的值是一個數字不串並請不要問我爲什麼用十進制爲ISBN [我的選擇;-)。最後一件事我只是沒有來這裏發佈我的問題並得到答案,我自2天以來一直是GOOGLING,並沒有找到解決我的問題的地方!

+1

調試這個問題的方法是檢查cboISBN.SelectedValue.ToString的'()的值在'時的時間則拋出異常。你相信它是數字的,但'ToDecimal'方法確定它不是。 – Blackwood

+1

所以...如果'cboISBN.SelectedValue'的值是十進制的,爲什麼你需要做'toString/Convert'?只要嘗試通過'cboISBN.SelectedValue'或'CType(cboISBN.SelectedValue,Decimal)'什麼是數據庫中的列的數據類型? –

+0

存在您的問題 - 您的數據庫數據類型不匹配。對於目前嘗試使用'Convert.ToInt32'傳遞價值,看看會發生什麼 –

回答

0

真正得到已經加載中,我設定的形式SelectedValue不是值cboISBN.selectedIndex = -1我們要改變combobox_SelectedIndexChangedcombobox_SelectionChangeCommitted事件組合框,然後它會順利工作而不給予任何錯誤。更多的澄清見下文代碼作爲樣品:

Private Sub cboISBN_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cboISBN.SelectionChangeCommitted 
     Dim v As Decimal = cboISBN.SelectedValue 
     If (cboISBN.SelectedIndex <> -1) Then 
      da = New SqlDataAdapter("SELECT isbn, no_of_books FROM book WHERE isbn [email protected]", cn) 
      da.SelectCommand.Parameters.AddWithValue("@isbn", v) 
      dt = New DataTable 
      da.Fill(dt) 
      If dt.Rows.Count > 0 Then 
       TxtNo_of_Books.Text = dt.Rows(0).Item("no_of_books") 
      End If 
     End If 
End Sub 
2

decimal.Parse有一個重載定義編號樣式。

你可以使用任何,來處理一切。 (例如千分隔符,空格等)

Convert.ToDecimal(cboISBN.SelectedValue.ToString(), 
    System.Globalization.NumberStyles.Any) 

第二問題可能是您的線程在不同的培養運行比德其他線程/應用至極轉換小數到字符串。例如在土耳其,十進制和千位分隔符字符反之亦然。

如果你有成千上萬小數點分隔符和逗號點,你可以使用固定區域性的解析如下圖所示:

Convert.ToDecimal(cboISBN.SelectedValue.ToString(), 
    System.Globalization.NumberStyles.Any, 
    System.Globalization.CultureInfo.InvariantCulture) 
+0

OP認爲輸入字符串是「1000000000002」,不涉及分隔符。 – Blackwood

+0

對,我的回答是在我看到數字之前。但是即使是tho,我認爲使用兩側的InvariantCulture(在此方法之前轉換爲字符串並返回到此方法中的小數點)是更好的習慣,即使是整數也是如此。 –