это что-то вроде продолжения в моей ветке Как проверить MySQL DB — пользователь является частью группы. Я разрабатываю страницу входа с использованием базовой аутентификации IIS и ASp.NET в качестве моей страницы входа по умолчанию. Что я пытаюсь сделать, так это то, что когда пользователь входит на страницу входа в asp.net, он подключается к моей базе данных MYSQL, проверяет столбец моей таблицы с именем group_name и проверяет, является ли пользователь администратором, если да, то он будет перенаправлен на URL1 и, если нет, перенаправить на URL2.
К этому моменту я уже почти подошел к завершению перевода логики кода, который мне предоставили, из PDO в ASP.NET, но зато заблудился в той части, где мне нужно подготовить, связать и выполнить. Я не слишком знаком с этими функциями в PDO или даже ASP.NET. Я несколько дней изучал этот проект, изучая ASP.Net, и сейчас я был бы признателен за любую помощь.
Ниже приведен обновленный код после просмотра ответов (обновлено 28 февраля):
%@ Page Language="VB" debug="true" %>
<%@ Import Namespace = "System.Data" %>
<%@ Import Namespace = "MySql.Data.MySqlClient" %>
<script language="VB" runat="server">
Sub Page_Load(sender As Object, e As EventArgs)
Dim username As String = Convert.ToString(User.Identity.Name.Substring(User.Identity.Name.IndexOf("\") + 1))
Dim myConnection As MySqlConnection
Dim myDataAdapter As MySqlDataAdapter
Dim strSQL As String
Dim mySqlCommand As MySqlCommand
Dim counter As Integer
Dim isInGroup As Boolean
myConnection = New MySqlConnection("server=localhost; user id=Directory_Admin; password=IMCisgreat2014; database=imc_directory_tool; pooling=false;")
strSQL = "SELECT COUNT(*) FROM tbl_staff WHERE username = @username AND 'group_id' = '1001';"
myDataAdapter = New MySqlDataAdapter(strSQL, myConnection)
mySqlCommand = New MySqlCommand(strSQL)
mySqlCommand.Parameters.AddWithValue("@username", username)
counter = mySqlCommand.ExecuteScalar()
If isInGroup = counter > 0 Then
Response.Redirect("http://www.w3schools.com")
Else
Response.Redirect("http://www.google.ca")
End If
End Sub
</script>
<html>
<head>
<title>Simple MySQL Database Query</title>
</head>
<body>
Main page ...
</body>
</html>
Я пытаюсь скопировать логику следующего кода на мою страницу ASP.net.
$db = new PDO("mysql:host=localhost;dbname=db_name", $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$username = "username1";
$group = "Administrator";
$query = "SELECT COUNT(*) FROM tbl_staff
WHERE username = :username
AND `group` = :username";
$statement = $db->prepare($query);
$statement->bindValue(':username', $username);
$statement->bindValue(':password', $group);
$statement->execute();
$count = $statement->fetchColumn();
if ($count === 1)
{
return TRUE;
}
else
{
return FALSE;
}
Прежде всего, прочитайте о поставщиках членства в ASP.NET. То, что вы делаете, является очень распространенной задачей, поэтому MS встроила шаблон для членства в ASP.NET. Вы можете создать поставщика членства на основе вашей базы данных, а затем вы можете указать разрешения в Web.config вместо того, чтобы проверять каждую страницу или использовать Context.User.IsInRole («Administrators») `, который все равно будет работать, если, скажем, вы переключили свою базу данных членов на что-то вроде Active Directory.
Чтобы ответить на вопрос кода, который вы задавали о том, как использовать связанные параметры, это было бы что-то вроде (в C #, так как этот вопрос помечен C #)
var myConnection = new MySqlConnection("connection string");
var mySqlCommand = new MySqlCommand("SELECT COUNT(*) FROM tbl_staff WHERE username = @username AND 'group_id' = '1001'");
mySqlCommand.AddWithValue("@username", username);
int count = (int)mySqlCommand.ExecuteScalar();
bool isInGroup = count > 0;
Других решений пока нет …