在 vb.net 中使用 LINQ-to-SQL 和多个 select 语句
using LINQ-to-SQL in vb.net with multiple select statement
我对 vb.net 和 SQL 的 LINQ 非常陌生。
我整天都在尝试这样做,但它似乎根本不起作用。非常感谢您的帮助。
我有一个名为 users 的 table,其中包含 4 列
+---------+-----------+---------------+--------------+
| user_id | user_name | user_password | user_stopped |
+---------+-----------+---------------+--------------+
| 1 | admin | admin | false |
| 2 | user2 | 2 | false |
| 3 | user3 | 3 | true |
+---------+-----------+---------------+--------------+
我有一个来自三个文本框 "txtuserid" & "textusername" & "txtuserpassword" 和一个按钮名称 "login"
1) 在 "login" 按钮的 "on_click" 事件上,我有这个查询
Dim query = From check In Me.MydatabaseDataSet.users
Where check.user_id = Me.txtuserid.Text
Select check.user_name, check.user_password, check.user_stopped
我想做这样的事情:
if query.check.user_stopped= true then
msgbox("this user has no permission")
else
me.txtusername.text= query.user_name
if me.txtuserID.text= query.check.user_id and
me.txtuserpassword.text= query.check.user_password then
me.hide()
form2.show()
end if
end if
我已经尝试了几个小时,但似乎根本没有任何效果。
我正在使用 VB.net 2010 和 SQL 数据库。
非常感谢您的帮助。
其实Linq真的很简单
Dim id as Integer
integer.TryParse(Me.txtuserid.Text, id)
Dim query = From check In Me.MydatabaseDataSet.users
Where check.user_id = id
Select check
会简单地 return 所有具有给定 Id 的用户(Me.txtuserid.Text - 转换为整数,它是一个整数,对吧?)。
如果您特别想要 3 列:
Dim query = From check In Me.MydatabaseDataSet.users
Where check.user_id = id
Select New With {check.user_name, check.user_password, check.user_stopped}
但请记住,此版本是 returning 匿名类型,而前一个版本是 returns 用户类型。
仔细想想,user_id是一个主键(唯一)。因此,您不需要像上面 "query" 那样取回 "collection",您只需要一个用户:
Dim user = Me.MydatabaseDataSet.users.SingleOrDefault(Function(check) check.user_id = id)
如果该 ID 存在,则用户具有该用户的属性(键入的数据),否则为 NULL。
此代码与您稍后要执行的代码相匹配:
if user is not nothing
msgbox("unknown user")
else
if user.user_stopped= true then
msgbox("this user has no permission")
else
me.txtusername.text= user.user_name
if me.txtuserID.text= user.user_id and
me.txtuserpassword.text= user.user_password then
me.hide()
form2.show()
end if
end if
end if
注意:我假设这只是出于爱好测试目的,在现实世界中你永远不会想要存储纯文本密码。
我对 vb.net 和 SQL 的 LINQ 非常陌生。 我整天都在尝试这样做,但它似乎根本不起作用。非常感谢您的帮助。
我有一个名为 users 的 table,其中包含 4 列
+---------+-----------+---------------+--------------+
| user_id | user_name | user_password | user_stopped |
+---------+-----------+---------------+--------------+
| 1 | admin | admin | false |
| 2 | user2 | 2 | false |
| 3 | user3 | 3 | true |
+---------+-----------+---------------+--------------+
我有一个来自三个文本框 "txtuserid" & "textusername" & "txtuserpassword" 和一个按钮名称 "login"
1) 在 "login" 按钮的 "on_click" 事件上,我有这个查询
Dim query = From check In Me.MydatabaseDataSet.users
Where check.user_id = Me.txtuserid.Text
Select check.user_name, check.user_password, check.user_stopped
我想做这样的事情:
if query.check.user_stopped= true then
msgbox("this user has no permission")
else
me.txtusername.text= query.user_name
if me.txtuserID.text= query.check.user_id and
me.txtuserpassword.text= query.check.user_password then
me.hide()
form2.show()
end if
end if
我已经尝试了几个小时,但似乎根本没有任何效果。 我正在使用 VB.net 2010 和 SQL 数据库。
非常感谢您的帮助。
其实Linq真的很简单
Dim id as Integer
integer.TryParse(Me.txtuserid.Text, id)
Dim query = From check In Me.MydatabaseDataSet.users
Where check.user_id = id
Select check
会简单地 return 所有具有给定 Id 的用户(Me.txtuserid.Text - 转换为整数,它是一个整数,对吧?)。
如果您特别想要 3 列:
Dim query = From check In Me.MydatabaseDataSet.users
Where check.user_id = id
Select New With {check.user_name, check.user_password, check.user_stopped}
但请记住,此版本是 returning 匿名类型,而前一个版本是 returns 用户类型。
仔细想想,user_id是一个主键(唯一)。因此,您不需要像上面 "query" 那样取回 "collection",您只需要一个用户:
Dim user = Me.MydatabaseDataSet.users.SingleOrDefault(Function(check) check.user_id = id)
如果该 ID 存在,则用户具有该用户的属性(键入的数据),否则为 NULL。
此代码与您稍后要执行的代码相匹配:
if user is not nothing
msgbox("unknown user")
else
if user.user_stopped= true then
msgbox("this user has no permission")
else
me.txtusername.text= user.user_name
if me.txtuserID.text= user.user_id and
me.txtuserpassword.text= user.user_password then
me.hide()
form2.show()
end if
end if
end if
注意:我假设这只是出于爱好测试目的,在现实世界中你永远不会想要存储纯文本密码。