"Conversion from string to type Double is not valid" error VB.NET
The problem is that you are joining a string with a +
. You need to replace the +
with &
. I also recommend adding .ToString
to your m_decBalance
, as this will tell the compiler to treat m_decBalance
as a string
, like so:
MsgBox("You balance is " & " " & m_decBalance.ToString)
The reason you are getting the error is that the compiler tries to convert the string to a numeric value when +
is used with a number. For example, the following will display a messagebox with the value of 10
:
MsgBox("5 " + " " + 5)
and
Dim Val As Integer = "20 " + 15
will result in Val
being 35
When you want to join strings, I recommend using the &
, as this tells the compiler that you don't wish to convert the string to a number, and instead you wish to join them as strings.
I would also like to suggest using Option Strict On
, as this will help prevent errors like this from happening, as it prevent you from recompiling if you have any implicit conversions
(where the compiler has to guess which type you want to convert to)
user3275784
Updated on June 15, 2022Comments
-
user3275784 about 2 years
I'm trying to display a logged in users balance from a database in VB. However once I click the Check Balance button it produces the error
Conversion from string "Your balance is " to type 'Double' is not valid
.I've tried different ways a converting it from a string to a double, I thought maybe it was because I had m_decBalance declared as a decimal, but that didn't change anything. Can anyone help me? Here's my code:
Imports MySql.Data Imports MySql.Data.MySqlClient Public Class Form1 Dim dbCon As MySqlConnection Dim strQuery As String = "" Dim SQLcmd As MySqlCommand Dim DataReader As MySqlDataReader Private m_strPass As String Private m_decBalance As Decimal Private m_strName As String Private m_strUserPass As String Private m_strCardNumber As String Private Sub Button2_Click(sender As Object, e As EventArgs) Handles btnLogin.Click 'Assign users guessed password to variable m_strUserPass = txtPass.Text 'Invoke RetrieveAccountInformation() ' determine if Password is correct or not If m_strUserPass = m_strPass Then lblWelcome.Visible = True lblWelcome.Text = "Welcome" + " " + m_strName txtPass.Enabled = False btnBalance.Enabled = True Else ' indicate that incorrect password was provided lblWelcome.Visible = True lblWelcome.Text = "Sorry, Password is incorrect." _ & "Please retry ." ' clear user's previous PIN entry m_strUserPass = "" End If txtPass.Clear() ' clear TextBox End Sub ' load application Form Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 'Prepare connection and query Try dbCon = New MySqlConnection("Server=localhost;Database=test;Uid=root;Pwd=mysql") strQuery = "SELECT CardNumber " & "FROM Account" SQLcmd = New MySqlCommand(strQuery, dbCon) 'Open the connection dbCon.Open() ' create database reader to read information from database DataReader = SQLcmd.ExecuteReader ' fill ComboBox with account numbers While DataReader.Read() cboAccountNumbers.Items.Add(DataReader("CardNumber")) End While 'Close the connection DataReader.Close() dbCon.Close() Catch ex As Exception 'Output error message to user with explaination of error MsgBox("Failure to communicate" & vbCrLf & vbCrLf & ex.Message) End Try End Sub ' invoke when user provides account number Private Sub RetrieveAccountInformation() ' specify account number of record from which data will be retrieved dbCon = New MySqlConnection("Server=localhost;Database=test;Uid=root;Pwd=mysql") strQuery = "SELECT Name, Balance, Password " & "FROM Account WHERE CardNumber='" & Val(cboAccountNumbers.Text) & "' " SQLcmd = New MySqlCommand(strQuery, dbCon) dbCon.Open() ' open database connection ' create database reader to read information from database DataReader = SQLcmd.ExecuteReader DataReader.Read() ' open data reader connection ' retrieve Password number, balance amount and name information from database m_strPass = Convert.ToString(DataReader("Password")) m_decBalance = Convert.ToString(DataReader("Balance")) m_strName = Convert.ToString(DataReader("Name")) DataReader.Close() ' close data reader connection dbCon.Close() ' close database connection End Sub ' RetrieveAccountInformation Private Sub btnBalance_Click(sender As Object, e As EventArgs) Handles btnBalance.Click 'Retrieve their account information RetrieveAccountInformation() Try MsgBox("You balance is " + " " + m_decBalance) Catch ex As Exception MsgBox(ex.Message) End Try End Sub End Class