注册 登录
编程论坛 VB6论坛

求助!!用存储过程在vb写了个登录功能,但是输进去错误的账号密码也能成功,求帮忙!!

Littlewen 发布于 2020-06-12 19:28, 1445 次点击
存储过程:
程序代码:

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




2 回复
#2
cwa99582020-06-13 08:42
存储过程真的没有用过。
你的这个不管是什么,结果都是0,是吧。
这说明不管是什么账号密码,赋值语句都没有执行!因为变量的默认值就是0。
你可以逐句运行程序,看看问题在哪。
还有,运行的时候看看变量cmd的值是什么。

ps:用户名密码登录真的不需要这么复杂,
#3
Littlewen2020-06-15 23:17
回复 2楼 cwa9958
谢谢!发现问题了,写了一个缩减版本的,解决了!
1