为了检查特定用户是否为db_owner,我执行以下查询:
"select is_rolemember('db_owner', '" & p_userName & "')"
使用SqlCommand
ExecuteNonQuery
方法。
如何获取查询结果?
这是我的代码:
Dim com As SqlCommand = New SqlCommand(sql, m_connection)
com.ExecuteNonQuery()
sql是查询,m_connection是connectionString。
答案 0 :(得分:2)
您可以使用ExecuteScalar
像卢塞罗说的那样。执行查询,并返回第一行的第一列 查询返回的结果集。其他列或行是 忽略。
EX:
cmd.CommandText = "SELECT COUNT(*) FROM dbo.region";
Int32 count = (Int32) cmd.ExecuteScalar();
返回Int
。
答案 1 :(得分:2)
虽然每个人都给出了答案,但我想指出,如果p_userName无论如何都会受到客户端的影响,那么你的sql很容易被注入。
另请注意,is_rolemember可以返回Null(See Microsoft Reference) 下面是一个不易受Sql Injection攻击的实现(它使用参数化的sql)。
Dim com As SqlCommand = New SqlCommand("select is_rolemember('db_owner', @UserName)", m_connection)
com.Parameters. AddWithValue("@UserName", p_userName)
Dim result As Object = com.ExecuteScalar
If (result = DBNull.Value) Then
Throw New Exception("database_principal or role is not valid, or you do not have permission to view the role membership.")
Else
Return CType(result,Int32)
End If
答案 2 :(得分:0)
您需要使用ExecuteScalar
,而不是ExecuteNonQuery
。