标题:求助!!用存储过程在vb写了个登录功能,但是输进去错误的账号密码也能成功 ...
只看楼主
Littlewen
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-6-12
结帖率:100%
已结贴  问题点数:20 回复次数:2 
求助!!用存储过程在vb写了个登录功能,但是输进去错误的账号密码也能成功,求帮忙!!
存储过程:
程序代码:
USE [WeMeet]
GO
/****** Object:  StoredProcedure [dbo].[usp_Login]    Script Date: 06/12/2020 17:08:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER proc [dbo].[usp_Login]  

@name varchar(50),


 @pwd varchar(50),  

@isLogin int output  

--0 登陆成功 1用户名为空 2密码为空 3用户名错误 4密码错误 

as  declare @times int  --错误次数


 --根据用户名是否存在  

if(@name is null)
begin
    set @isLogin=1
end
else
    if (@pwd is null)
    begin
        set @isLogin=2
    end

    else
        if exists(select * from [Player] where pName=@name) 
        begin   

              if exists(select * from [Player] where pName=@name and pPassword=@pwd)     

              begin      
              --用户名密码正确 登陆成功       
              set @isLogin=0    
              end      

             else       
             begin     
               --密码错误       
             set @isLogin=4          
             end     
        end  

        else

        --用户名不存在   
        begin
        set @isLogin= 3
        end




vb代码
程序代码:
Private Sub Command1_Click()
  Dim cmd As String, cc As Long
  On Error GoTo ErrorHandler
  If Trim(Text1.Text) = "" Then
P1:  MsgBox "用户名不可以为空", vbOKOnly:   Exit Sub
  End If
  If Trim(Text2.Text) = "" Then
P2: MsgBox "密码不可以为空", vbOKOnly:   Exit Sub
  End If
  

  cmd = " begin tran "
  cmd = cmd & " declare @name char(50),@pwd char(50),@isLogin int"

  cmd = cmd & " set nocount on "
  cmd = cmd & " SET @name='" & Trim(Text1.Text) & "' "
  cmd = cmd & " SET @pwd ='" & Trim(Text2.Text) & "' "

  cmd = cmd & " Exec usp_Login @name,@pwd,@isLogin"
  cmd = cmd & " select @isLogin"
  cmd = cmd & " if @isLogin=0 commit else rollback "
  Adodc1.RecordSource = cmd
  Adodc1.Refresh

  If Not IsNull(Adodc1.Recordset.Fields(0)) Then
    cc = Val(Adodc1.Recordset.Fields(0))
  End If
  
  If cc = 0 Then MsgBox "已成功登录", vbOKOnly: Phome.Show vbModal: Unload Me: Exit Sub
  If cc = 1 Then GoTo P1
  If cc = 2 Then GoTo P2
  If cc = 3 Then MsgBox "用户名不存在", vbOKOnly: Exit Sub
  If cc = 4 Then MsgBox "密码错误", vbOKOnly: Exit Sub

P0:
  MsgBox "发生一个未知错误!", vbOKOnly: Exit Sub


ErrorHandler:
  MsgBox (Err.Description & Chr(13) & Chr(10))
  Resume P0
End Sub

Private Sub Command2_Click()
   Unload Me
End Sub
Private Sub Form_Load()
   Text1.Text = ""
   Text2.Text = ""
End Sub




搜索更多相关主题的帖子: if SET end Sub cmd 
2020-06-12 19:28
cwa9958
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:247
专家分:1228
注 册:2006-6-25
得分:20 
存储过程真的没有用过。
你的这个不管是什么,结果都是0,是吧。
这说明不管是什么账号密码,赋值语句都没有执行!因为变量的默认值就是0。
你可以逐句运行程序,看看问题在哪。
还有,运行的时候看看变量cmd的值是什么。

ps:用户名密码登录真的不需要这么复杂,
2020-06-13 08:42
Littlewen
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-6-12
得分:0 
回复 2楼 cwa9958
谢谢!发现问题了,写了一个缩减版本的,解决了!
2020-06-15 23:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502097-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.087607 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved