【发布时间】:2013-12-28 18:18:08
【问题描述】:
我在 Visual Studio 中创建了一个 vb windows forms webservice。我遇到了一个问题,即布尔变量总是返回 true,即使它不应该返回。我是 VB 新手,所以这可能只是一个简单的编码错误,但我无法弄清楚。
基本上我有一个登录表单,用户输入用户名,从表单我将用户名传递给服务中名为 checkuser 的函数,以查看用户是否存在于数据库中。如果用户存在它应该去另一个函数加载现有数据,如果不它应该调用 createuser 函数。
如果用户确实存在,则该变量应返回 true,否则返回 false。然而,在测试程序时,即使我输入了一个不存在的新用户名,变量似乎也总是返回 true。
这是获取用户名并将其传递给 checkUser 函数的表单代码(登录表单)
Private Sub signInBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles signInBtn.Click
If signInNick.Text = "" Then
MessageBox.Show("Please enter a user name")
signInNick.Focus()
Else
signinName = signInNick.Text
Dim check As Boolean
check = service.checkUser(signinName)
MessageBox.Show(check)
If check = False Then
main.Visible = True
Me.Hide()
main.tbxUserName.Text = signinName
MessageBox.Show("User has been created")
Else
main.Visible = True
Me.Hide()
main.tbxUserName.Text = signinName
MessageBox.Show("Thankyou for Signing In " + signinName)
End If
End If
End Sub
这是服务中 checkUser 的代码
'Function to check if a user already exists in the database
<WebMethod()> _
Public Function checkUser(ByVal signinName As String) As Boolean
Dim userToCheck As String
Dim conn As New SqlConnection("Data Source=MARTIN-LAPTOP\SQLEXPRESS;Initial Catalog=musicPlaylist;Integrated Security=True")
Dim sql As String = "SELECT userNick FROM Users WHERE userNick = ('" & signinName & "')"
conn.Open()
Dim objcmd As New SqlCommand(sql, conn)
userToCheck = objcmd.ExecuteScalar()
If userToCheck = signinName Then
getExistingUserPLData(signinName)
Return True
Else
createUser(signinName)
Return False
End If
End Function
表单代码中的检查变量似乎总是返回 true,这会导致服务函数跳转到 getExistingUserPLData,如果用户是新用户,则不会创建用户。
奇怪的是,如果我通过http://localhost:50445/Service1.asmx 的 web 服务网页执行此操作,输入一个全新的用户名并调用 checkUser,如果用户不存在,它将返回 false,如果用户存在则返回 true,但它会不起作用,只有通过表单客户端完成才返回 true。
更新:答案之一中提供的代码
If String.Equals(userToCheck, signinName, StringComparison.OrdinalIgnoreCase) Then
似乎有点工作,因为如果在登录框中输入新用户名,程序似乎会跳转到 createUser 函数,但它在 createUser 函数处给我一个错误
主键约束失效,不能插入重复键
这里是 createUser 的代码
<WebMethod()> _
Public Function createUser(ByVal signinName As String) As String
Dim conn As New SqlConnection("Data Source=MARTIN-LAPTOP\SQLEXPRESS;Initial Catalog=musicPlaylist;Integrated Security=True")
Dim sql As String = "INSERT INTO Users (userNick) VALUES ('" & signinName & "')"
conn.Open()
Dim cmd As New SqlCommand(sql, conn)
Dim newUserName As String = cmd.ExecuteScalar()
conn.Close()
Return newUserName
End Function
它在Dim newUserName As String = cmd.ExecuteScalar() 处抛出错误
userNick 列是主键,但我不明白为什么当用户根本不存在于数据库中时它说不能插入重复键,我检查了数据库并且用户名不存在,我的代码完全错误吗?
感谢您的帮助
【问题讨论】:
-
ASMX 是一项遗留技术,不应用于新开发。 WCF 或 ASP.NET Web API 应该用于 Web 服务客户端和服务器的所有新开发。一个提示:微软已经在 MSDN 上停用了ASMX Forum。
-
我有一个布尔值,它在服务和域级别返回 False,但是当它冒泡到控制器时,它从 False 变为 True?! VB.net 世界。
标签: vb.net web-services asmx