如何修复此错误“从字符串转换为双精度无效” [英] How Can I Fix This Error"Conversion From String To Double Is Not Valid"

查看:88
本文介绍了如何修复此错误“从字符串转换为双精度无效”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码

  Imports  System.Data.SqlClient 
公共 frmChangePassword
Dim rdr As SqlDataReader = Nothing

Dim con As SqlConnection = Nothing

Dim cmd As SqlCommand = Nothing
私有 Sub Button1_Click( ByVal sender 作为系统。对象 ByVal e As System.EventArgs)句柄 Button1.Click
尝试
Dim RowsAffected 作为 整数 = 0
如果 Len(Trim(UserName.Text))= 0 然后
MessageBox.Show( 请输入用户名 输入错误,MessageBoxButtons.OK,MessageBoxIcon。错误
UserName.Focus()
退出 Sub
结束 如果
如果 Len(Trim(OldPassword.Text))= 0 然后
MessageBox.Show ( 请输入旧密码 输入错误,MessageBoxButtons.OK,MessageBoxIcon。错误
OldPassword.Focus()
退出 Sub
结束 如果
如果 Len(Trim(NewPassword.Text))= 0 然后
MessageBox.Show( 请输入新密码 输入错误 ,MessageBoxButtons.OK,MessageBoxIcon。错误
NewPassword.Focus()
退出 Sub
结束 如果
如果 Len(Trim(ConfirmPassword.Text))= 0 然后
MessageBox.Show( 请确认新密码 输入错误,MessageBoxButtons.OK,MessageBoxIcon。错误
ConfirmPassword.Focus()
退出 Sub
结束 如果
如果 NewPassword.TextLength< 5 然后
MessageBox.Show( 新密码应为Atleast 5个字符 输入错误,MessageBoxButtons.OK,MessageBoxIcon。错误
NewPassword.Text =
ConfirmPassword.Text =
NewPassword.Focus()
退出 Sub
ElseIf NewPassword.Text<> ConfirmPassword.Text 然后
MessageBox.Show( 密码不匹配 输入错误,MessageBoxButtons.OK,MessageBoxIcon。 错误
NewPassword.Text =
OldPassword.Text =
ConfirmPassword.Text =
OldPassword.Focus()
退出 Sub
ElseIf OldPassword.Text = NewPassword.Text < span class =code-keyword>然后
MessageBox.Show( 密码相同..重新输入新密码 输入错误,MessageBoxButtons.OK,MessageBoxIcon。错误
NewPassword.Text = < span class =code-string>
ConfirmPassword.Text =
NewPassword.Focus()
退出 Sub
结束 如果

Dim ck As String = < span class =code-string> Data Source = .\SqlExpress;综合安全=真; AttachDbFilename = | DataDirectory目录| \ProductManagerDB.mdf; User Instance = true;

con = SqlConnection(ck)

con.Open ()

Dim co <​​span class =code-keyword> As 字符串 = 更新用户设置密码='& NewPassword.Text& 'where username ='& UserName.Text& '和密码='& OldPassword.Text& < span class =code-string>'
'

cmd = SqlCommand(co)

cmd.Connection = con
RowsAffected = cmd.ExecuteNonQuery( )
如果 RowsAffected> 0 然后

MessageBox.Show( 已成功更改 密码,MessageBoxButtons.OK,MessageBoxIcon.Information)
Me .Hide()
UserName.Text =
NewPassword.Text = < span class =code-string>
OldPassword.Text =
ConfirmPassword.Text =

frmLogin。 Show()
frmLogin.UserName.Text =
frmLogin.Password.Text =


frmLogin。 UserName.Focus()
Else

MessageBox.Show( 无效的用户名或密码 输入错误 ,MessageBoxButtons.OK,MessageBoxIcon。错误
UserName.Text =
NewPassword.Text =
OldPassword.Text =
ConfirmPassword.Text = < span class =code-string>
UserName.Focus()
结束 如果








如果 con.State = ConnectionState.Open 然后

con.Close()

结束 如果
con.Close()


Catch ex As 异常
MessageBox.Show(ex.Message, 错误 ,MessageBoxButtons.OK,MessageBoxIcon。错误
结束 尝试

结束 Sub

解决方案

你从未指出过抛出引发错误的代码行。我找不到它,因为这个代码都没有与Double有任何关系。



这很简单。您正在尝试将一些字符串值分配给已声明为Double的变量。你不能这样做。您必须将字符串转换为Double。



您的SQL容易受到SQL注入攻击。如果有人在你的一个文本框中键入正确的内容,他们可能会破坏整个数据库。 Google for SQL Injection可以了解更多信息。


其中一个参数是从字符串隐式转换为double。



另外,您可以查看在查询中使用命令参数。您提出的查询很容易被 SQL Injection [< a href =http://www.codeproject.com/Articles/459324/Understading-SQL-Injection-and-Creating-SQL-Injecttarget =_ blanktitle =New Window> ^ ]

Here is my code

Imports System.Data.SqlClient
Public Class frmChangePassword
    Dim rdr As SqlDataReader = Nothing

    Dim con As SqlConnection = Nothing

    Dim cmd As SqlCommand = Nothing
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            Dim RowsAffected As Integer = 0
            If Len(Trim(UserName.Text)) = 0 Then
                MessageBox.Show("Please enter user name", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                UserName.Focus()
                Exit Sub
            End If
            If Len(Trim(OldPassword.Text)) = 0 Then
                MessageBox.Show("Please enter old password", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                OldPassword.Focus()
                Exit Sub
            End If
            If Len(Trim(NewPassword.Text)) = 0 Then
                MessageBox.Show("Please enter new password", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                NewPassword.Focus()
                Exit Sub
            End If
            If Len(Trim(ConfirmPassword.Text)) = 0 Then
                MessageBox.Show("Please confirm new password", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                ConfirmPassword.Focus()
                Exit Sub
            End If
            If NewPassword.TextLength < 5 Then
                MessageBox.Show("The New Password Should be of Atleast 5 Characters", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                NewPassword.Text = ""
                ConfirmPassword.Text = ""
                NewPassword.Focus()
                Exit Sub
            ElseIf NewPassword.Text <> ConfirmPassword.Text Then
                MessageBox.Show("Password do not match", "Input error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                NewPassword.Text = ""
                OldPassword.Text = ""
                ConfirmPassword.Text = ""
                OldPassword.Focus()
                Exit Sub
            ElseIf OldPassword.Text = NewPassword.Text Then
                MessageBox.Show("Password is same..Re-enter new password", "Input error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                NewPassword.Text = ""
                ConfirmPassword.Text = ""
                NewPassword.Focus()
                Exit Sub
            End If

            Dim ck As String = "Data Source=.\SqlExpress; Integrated Security=True; AttachDbFilename=|DataDirectory|\ProductManagerDB.mdf; User Instance=true;"

            con = New SqlConnection(ck)

            con.Open()

            Dim co As String = "Update Users set Password = '" & NewPassword.Text & "'where username='" & UserName.Text & "' and Password = '" & OldPassword.Text & "'"
            '

            cmd = New SqlCommand(co)

            cmd.Connection = con
            RowsAffected = cmd.ExecuteNonQuery()
            If RowsAffected > 0 Then

                MessageBox.Show("Successfully changed", "Password", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Hide()
                UserName.Text = ""
                NewPassword.Text = ""
                OldPassword.Text = ""
                ConfirmPassword.Text = ""

                frmLogin.Show()
                frmLogin.UserName.Text = ""
                frmLogin.Password.Text = ""


                frmLogin.UserName.Focus()
            Else

                MessageBox.Show("invalid user name or password", "input error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                UserName.Text = ""
                NewPassword.Text = ""
                OldPassword.Text = ""
                ConfirmPassword.Text = ""
                UserName.Focus()
            End If








            If con.State = ConnectionState.Open Then

                con.Close()

            End If
            con.Close()


        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

解决方案

You never pointed out the line of code that throws the error. I can't find it as none of this code should have anything to do with a Double.

It's simple really. You're trying to assign some string value to a variable that has been declared Double. You can't do that. You have to convert the string to a Double.

You SQL is susceptible to SQL Injection attacks. If someone typed the right thing into one of your text boxes they could destroy your entire database. Google for SQL Injection to find out more.


One of the parameters is getting converted from string to double implicitly.

Additionally, you can look at using command parameters in your query. You present query is an easy prey to SQL Injection[^].


这篇关于如何修复此错误“从字符串转换为双精度无效”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆