Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 查询结果正确,但使用执行标量函数时系统返回0 ConnectString.connectStr() con.Open() 尝试 cmd.Connection=con cmd.CommandText=(“从登录名中选择计数(userid),其中userid=”&UserNametxt.Text&“”) Dim userName As Integer=Convert.ToInt32(cmd.ExecuteScalar()) 如果用户名为0,则 cmd.CommandText=(“从登录名中选择计数(密码),其中userid=”&passwordtxt.Text&“”) 将密码设置为整数=Convert.ToInt32(cmd.ExecuteScalar()) 如果密码为0,则 UserMenu.Show() 其他的 MsgBox(“密码错误”) 如果结束 其他的_Sql Server_Vb.net - Fatal编程技术网

Sql server 查询结果正确,但使用执行标量函数时系统返回0 ConnectString.connectStr() con.Open() 尝试 cmd.Connection=con cmd.CommandText=(“从登录名中选择计数(userid),其中userid=”&UserNametxt.Text&“”) Dim userName As Integer=Convert.ToInt32(cmd.ExecuteScalar()) 如果用户名为0,则 cmd.CommandText=(“从登录名中选择计数(密码),其中userid=”&passwordtxt.Text&“”) 将密码设置为整数=Convert.ToInt32(cmd.ExecuteScalar()) 如果密码为0,则 UserMenu.Show() 其他的 MsgBox(“密码错误”) 如果结束 其他的

Sql server 查询结果正确,但使用执行标量函数时系统返回0 ConnectString.connectStr() con.Open() 尝试 cmd.Connection=con cmd.CommandText=(“从登录名中选择计数(userid),其中userid=”&UserNametxt.Text&“”) Dim userName As Integer=Convert.ToInt32(cmd.ExecuteScalar()) 如果用户名为0,则 cmd.CommandText=(“从登录名中选择计数(密码),其中userid=”&passwordtxt.Text&“”) 将密码设置为整数=Convert.ToInt32(cmd.ExecuteScalar()) 如果密码为0,则 UserMenu.Show() 其他的 MsgBox(“密码错误”) 如果结束 其他的,sql-server,vb.net,Sql Server,Vb.net,对于您的案例,正常查询和功能的查询结果不能不同。但是你的功能应该有问题。 请用下面的代码更正您的代码 ConnectString.connectStr() con.Open() Try cmd.Connection = con cmd.CommandText = ("select COUNT(userid) from login where userid='" & UserNametxt.Text & "'") Dim userName As Intege

对于您的案例,正常查询和功能的查询结果不能不同。但是你的功能应该有问题。 请用下面的代码更正您的代码

ConnectString.connectStr()
con.Open()
Try
    cmd.Connection = con
    cmd.CommandText = ("select COUNT(userid) from login where userid='" & UserNametxt.Text & "'")
    Dim userName As Integer = Convert.ToInt32(cmd.ExecuteScalar())
    If userName <> 0 Then
        cmd.CommandText = ("select COUNT(password) from login where userid='" & passwordtxt.Text & "'")
        Dim password As Integer = Convert.ToInt32(cmd.ExecuteScalar())
        If password <> 0 Then
            UserMenu.Show()
        Else
            MsgBox("Password is wrong")
        End If
    Else

保持本地连接,直到最后一分钟才打开

使用块可确保即使出现错误,也会关闭和释放数据库对象

调用数据库时始终使用参数。否则,您将面临Sql注入的风险。此外,它还可以防止错误传递数据,并可能加快查询速度

为什么要点击数据库两次?只需在一个查询中用And和Where子句提问即可。如果用户名或密码不正确,请不要让用户知道。请记住,您正试图阻止未经授权的访问。就说登录失败了

我将CountUser的声明移动到Using块的上方,以便可以在Using块的下方看到它。我们不希望在连接打开时显示MessageBox。不知道用户何时响应该消息,连接将在等待时打开

在实际应用程序中,您永远不会将密码存储为纯文本

Private子按钮2\u单击(发送者作为对象,e作为事件参数)处理按钮2。单击
Dim CountUser作为整数
'将连接字符串直接传递给连接的构造函数。
将cn用作新的SqlConnection(“您的连接字符串”)
'将命令文本和连接直接传递给命令的构造函数
使用cmd作为新的SqlCommand(“从登录名中选择COUNT(userid),其中userid=@userid和password=@password;”,cn)
'我在猜测SqlDbType。检查数据库中的实际类型。
cmd.Parameters.Add(“@UserID”,SqlDbType.VarChar).Value=UserNametxt.Text
cmd.Parameters.Add(“@password”,SqlDbType.VarChar).Value=passwordtxt.Text
cn.Open()
CountUser=Convert.ToInt32(cmd.ExecuteScalar())
终端使用
终端使用
如果计数用户1,则
MessageBox.Show(“登录失败”)
其他的
“把他们送到程序里去
如果结束
端接头

代码中有两个
cmd.ExecuteScalar()
。哪一个为您返回0?我想您不需要通过
userid
执行
WHERE
?I在第一种情况下,您传递的不是已使用的id,而是用户名,而在另一种情况下,您传递的是密码?用户名不返回1,Db已存在数据一个字段只能有一个值。您正在签入第一个查询
userid='“&usernametx.Text&'”
和第二个查询
userid='“&passwordtxt.Text&'”
。至少有一个查询返回0。顺便说一句:请尝试在查询中使用参数以避免SQL注入。如何在vb.net中从该函数调用?以及如何从屏幕传递用户id与SQL查询相同:选择测试示例(在参数中)
CREATE FUNCTION test_example (@userid BIGINT)
RETURNS BIGINT
BEGIN
    RETURN (select COUNT(userid) from login where userid = @userid)
END