如何修复此错误“从字符串转换为双精度无效” [英] How Can I Fix This Error"Conversion From String To Double Is Not Valid"
本文介绍了如何修复此错误“从字符串转换为双精度无效”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我的代码
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屋!
查看全文