更改密码不能更新到数据库中去

shmilyian 2008-07-11 04:06:05
更改密码,不能更新到数据库中去.

用户表名 operator
o_no o_name o_pwd
0000 管理员 0000
0001 用户1 0001


+++++++++++++++++++++++++++++++++++++++++++++++++++++++
以下是和程序


Imports System.Data.SqlClient
Public Class frm_cld_changepwd
Dim usrno As String '定义当前用户工号
Dim oldpwd As String '定义旧密码
Dim newpwd As String '定义新密码
Dim newpwdagain As String '定义重输入的新密码



Private Sub frm_cld_changepwd_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'以下两行取得用户工号
usrno = frm_prt_main.ToolStripStatusLabel4.Text.Substring(0, 4)
'以上两行取得用户工号
End Sub

''' <summary>
''' 字符串去空格函数
''' </summary>
''' <param name="SearchString"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function DelBlank(ByVal SearchString As String)
DelBlank = Replace(SearchString, Chr(32), "")
End Function


Private Sub btn_cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cancel.Click
Me.Close()
End Sub
''' <summary>
''' 取三个输入,并验证
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub btn_ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ok.Click
'第零步,取三个输入
'--------------------------------------
'这里还要验证三个字符串中不含有无效字符
'--------------------------------------
oldpwd = mtb_oldpwd.Text
newpwd = mtb_newpwd.Text
newpwdagain = mtb_newpwdagain.Text
'第一步,验证新密码的两次输入是否相同
If newpwd = newpwdagain Then
'第二步,验证旧密码是否与数据库中的对应密码相同
Try
'以下打开用户表
'声明读数据库语句
Dim str_select As String = "SELECT o_pwd FROM operator where o_no=" & usrno & ""
'声明一个SqlDataAdapter
'并执行str_select语句
Dim sqlda As New SqlDataAdapter
sqlda.SelectCommand = New SqlCommand(str_select, frm_prt_main.conn)
'声明一个数据集
'并执行数据集的填充
Dim sqlds As New DataSet
sqlda.Fill(sqlds, "operator")
'声明一个Data Table并取得数据
Dim sqldt As DataTable = sqlds.Tables("operator")
Dim str_pwd As String '读取的工号跟用户名
str_pwd = DelBlank(sqldt.Rows(0).Item(0))
'以上打开用户表并取得密码

'验证
If str_pwd = oldpwd Then
'第三点,如果以上两步验证通过,将新密码更新到数据库中
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'声明一个更新语句
Dim str_update As String = "update operator set o_pwd=" & newpwd & " where o_no=" & usrno & ""
'声明一个更新语句命令
Dim updateCmd As New SqlCommand(str_update, frm_prt_main.conn)
sqlda.UpdateCommand = updateCmd
'更新数据
sqlda.Update(sqlds, "operator")
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
以上语句有没有什么错误?
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



'释放 datatable dataset dataadapter 资源
sqldt.Dispose()
sqlds.Dispose()
sqlda.Dispose()
MsgBox("更改密码成功", MsgBoxStyle.OkOnly, "信息提示")
Me.Close()
Else
MsgBox("原密码错误")
Me.mtb_newpwd.Text = ""
Me.mtb_newpwdagain.Text = ""
Me.mtb_oldpwd.Text = ""
End If
Catch ex As SqlException
' Display error
Console.WriteLine("Error: " & ex.ToString())
Finally
' Close Connection
'thisConnection.Close()
'Console.WriteLine("Connection Closed")
End Try

Else
MsgBox("新密码与重输入不相同")
Me.mtb_newpwd.Text = ""
Me.mtb_newpwdagain.Text = ""
Me.mtb_oldpwd.Text = ""
End If
End Sub
End Class
...全文
164 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
amandag 2008-07-12
  • 打赏
  • 举报
回复
上面有 "结贴去..." 按钮
shmilyian 2008-07-12
  • 打赏
  • 举报
回复
好,再试

给分怎么给?没找到网站的帮助文件
amandag 2008-07-12
  • 打赏
  • 举报
回复
最后一句应该把取到的o_pwd的值赋给下文提到的变量str_pwd,因为在下文中是用str_pwd来判断的
==
这里要用DataReader或者cmd.ExecuteScalar()取的这个值,就我修改的代码是用的cmd.ExecuteScalar()方法
amandag 2008-07-12
  • 打赏
  • 举报
回复
@o_no
==
这个变量叫什么都无所谓,只要你给它赋值的时候用你的变量即可,也就是
cmd.Parameters.AddWithValue("@o_no", usrno)

shmilyian 2008-07-12
  • 打赏
  • 举报
回复
原来如此,以后用 @变量 这种写法

Dim str_select As String = "SELECT o_pwd FROM operator where o_no= @o_no" 红色部分是不是应该是上文担到的变量 usrno?
Dim cmd As New SqlCommand(str_select, frm_prt_main.conn)
cmd.Parameters.AddWithValue("@o_no", usrno)
最后一句应该把取到的o_pwd的值赋给下文提到的变量str_pwd,因为在下文中是用str_pwd来判断的
我把这一句改成cmd.Parameters.AddWithValue("@str_pwd", o_no)提示o_no未定义

MSDN比较难看懂
amandag 2008-07-12
  • 打赏
  • 举报
回复
@变量
==
用参数而不是拼接SQL语句,这个是防止SQL注入的基本常识
shmilyian 2008-07-12
  • 打赏
  • 举报
回复
Nobel0429 兄

这两个语句有什么差异吗?
都能执行,都没有效果

另外变量好象还有另外一种写法
"@变量"
是不是跟兄弟的那个写法表示得是一样的?
Nobel0429 2008-07-12
  • 打赏
  • 举报
回复
如果数据库中2个字段都是int类型的
Dim str_update As String = "update operator set o_pwd=" & newpwd & " where o_no=" & usrno

如果数据库中2个字段都是varchar类型的
Dim str_update As String = "update operator set o_pwd=' " & newpwd & "' where o_no='" & usrno &"' "
shmilyian 2008-07-12
  • 打赏
  • 举报
回复
正在学习中,现在对这些对象啊方法啊不是很理解 vb.net比vb难理解多了

先加好友学习学习
amandag 2008-07-11
  • 打赏
  • 举报
回复
大致这样..
Imports System.Data.SqlClient
Public Class frm_cld_changepwd
Dim usrno As String '定义当前用户工号
Dim oldpwd As String '定义旧密码
Dim newpwd As String '定义新密码
Dim newpwdagain As String '定义重输入的新密码


Private Sub frm_cld_changepwd_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'以下两行取得用户工号
usrno = frm_prt_main.ToolStripStatusLabel4.Text.Substring(0, 4)
'以上两行取得用户工号
End Sub

''' <summary>
''' 字符串去空格函数
''' </summary>
''' <param name="SearchString"> </param>
''' <returns> </returns>
''' <remarks> </remarks>
Public Function DelBlank(ByVal SearchString As String)
DelBlank = Replace(SearchString, Chr(32), "")
End Function


Private Sub btn_cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cancel.Click
Me.Close()
End Sub
''' <summary>
''' 取三个输入,并验证
''' </summary>
''' <param name="sender"> </param>
''' <param name="e"> </param>
''' <remarks> </remarks>
Private Sub btn_ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ok.Click
'第零步,取三个输入
'--------------------------------------
'这里还要验证三个字符串中不含有无效字符
'--------------------------------------
oldpwd = mtb_oldpwd.Text
newpwd = mtb_newpwd.Text
newpwdagain = mtb_newpwdagain.Text
'第一步,验证新密码的两次输入是否相同
If newpwd = newpwdagain Then
'第二步,验证旧密码是否与数据库中的对应密码相同
Try
'以下打开用户表
'声明读数据库语句
Dim str_select As String = "SELECT o_pwd FROM operator where o_no= @o_no"

Dim cmd As New SqlCommand(str_select, frm_prt_main.conn)
cmd.Parameters.AddWithValue("@o_no", usrno)

Dim o As Object
'假如frm_prt_main.conn没打开
frm_prt_main.conn.Open()
o = cmd.ExecuteScalar()
Dim str_pwd As String
If Not (o Is Nothing) Then
str_pwd = o.ToString()
End If
frm_prt_main.conn.Close()
'以上打开用户表并取得密码

'验证
If str_pwd = oldpwd Then
'第三点,如果以上两步验证通过,将新密码更新到数据库中
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'声明一个更新语句
Dim str_update As String = "update operator set o_pwd= @o_pwd where o_no = @o_no"
'声明一个更新语句命令
Dim updateCmd As New SqlCommand(str_update, frm_prt_main.conn)
updateCmd.Parameters.AddWithValue("@o_pwd", newpwd)
updateCmd.Parameters.AddWithValue("@o_no", usrno)
frm_prt_main.conn.Open()
updateCmd.ExecuteNonQuery()
frm_prt_main.conn.Close()
MsgBox("更改密码成功", MsgBoxStyle.OkOnly, "信息提示")
Me.Close()
Else
MsgBox("原密码错误")
Me.mtb_newpwd.Text = ""
Me.mtb_newpwdagain.Text = ""
Me.mtb_oldpwd.Text = ""
End If
Catch ex As SqlException
' Display error
Console.WriteLine("Error: " & ex.ToString())
Finally
' Close Connection
'thisConnection.Close()
'Console.WriteLine("Connection Closed")
End Try

Else
MsgBox("新密码与重输入不相同")
Me.mtb_newpwd.Text = ""
Me.mtb_newpwdagain.Text = ""
Me.mtb_oldpwd.Text = ""
End If
End Sub
End Class
amandag 2008-07-11
  • 打赏
  • 举报
回复
直接更新就行了,干吗还用DataAdapter?
tickhood 2008-07-11
  • 打赏
  • 举报
回复
为什么要用 dataadpter, 直接执行啊updateCmd.ExecuteNonQuery 就行了
hc8112_boy 2008-07-11
  • 打赏
  • 举报
回复
指定了SqlDataAdapter 的 updatecommandtext 但没有见到你对dataset.table("operator") o_pwd进行修改
烈火焚身 2008-07-11
  • 打赏
  • 举报
回复
up
maddemon 2008-07-11
  • 打赏
  • 举报
回复
"update operator set o_pwd='" & newpwd & "' where o_no=" & usrno & ""

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧