Как получить результат SqlCommand ExecuteNonQuery? - PullRequest
3 голосов
/ 29 августа 2011

Чтобы проверить, является ли конкретный пользователь 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 - строка соединения.

Ответы [ 3 ]

2 голосов
/ 29 августа 2011

Вы можете использовать ExecuteScalar

Выполняет запрос и возвращает первый столбец первой строки в наборе результатов, возвращенных запросом.Дополнительные столбцы или строки игнорируются.

, как сказал Лусеро.

EX:

cmd.CommandText = "SELECT COUNT(*) FROM dbo.region";
Int32 count = (Int32) cmd.ExecuteScalar();

Возвращение Int.

2 голосов
/ 29 августа 2011

Хотя все дали ответ, я хотел бы отметить, что ваш sql уязвим для инъекций, если клиент в любом случае может повлиять на p_userName.

Также обратите внимание, что is_rolemember может возвращать ноль (См. Справочник Microsoft ). Ниже приведена реализация, которая не подвержена 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
0 голосов
/ 29 августа 2011

Вам нужно использовать ExecuteScalar, а не ExecuteNonQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...