如何获得SqlCommand ExecuteNonQuery结果?

时间:2011-08-29 08:53:24

标签: sql vb.net sql-server-2008

为了检查特定用户是否为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。

3 个答案:

答案 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