"Conversion from string to type Double is not valid" error VB.NET

16,918

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)

Share:
16,918
user3275784
Author by

user3275784

Updated on June 15, 2022

Comments

  • user3275784
    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