Jestem nowym programistą ASP.NET i tworzę aplikację internetową, w której znajduje się pasek menu z wieloma opcjami. Niektóre z tych opcji będą wyświetlane tylko administratorowi. Logika jest za systemem, aby sprawdzić, czy użytkownik jest administratorem, czy nie. Jeśli tak, zostaną wyświetlone opcje. Napisałem tę metodę, ale mam iniekcję sql i chcę ją usunąć.Jak usunąć wtrysk sql z tego zapytania i sprawić, aby działał dobrze?
Dla twojej informacji, Mam następujący projekt bazy danych:
- Użytkownicy tabela:
NetID, Name, Title
- Admini tabela:
ID, NetID
Oto metoda C#:
private bool isAdmin(string username)
{
string connString = "Data Source=appSever\\sqlexpress;Initial Catalog=TestDB;Integrated Security=True";
string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = '" + NetID + "')";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
// Open DB connection.
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
SqlDataReader reader = cmd.ExecuteReader();
if (reader != null)
if (reader.Read())
if (reader["ID"].Equals(1))
return true;
return false;
}
}
}
Próbowałem zmienić go wykonując zmieniającej trzecią linię do:
string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = @NetID)";
Ale mam następujący błąd i nie wiem dlaczego:
Must declare the scalar variable "@NetID".
mógłbyś pomóc ja w rozwiązaniu tego?
* * UPDATE:
After updating the code to the following:
private bool isAdmin(string username)
{
string NetID = username;
string connString = "Data Source=appServer\\sqlexpress;Initial Catalog=TestDB;Integrated Security=True";
string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = @NetID";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
// Open DB connection.
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
cmd.Parameters.AddWithValue("@NetID", NetID);
SqlDataReader reader = cmd.ExecuteReader();
if (reader != null)
if (reader.Read())
if (reader["NetID"] == username)
return true;
return false;
}
}
}
mam następujący błąd:
Niepoprawna składnia w pobliżu ')'.
Jak rozwiązać ten problem?
Można również rozważyć SQL zapisanych w bazie procedur. –
Naprawiono twój problem, zobacz moją edycję :) +1 za usunięcie iniekcji SQL;) – whosrdaddy
Nadal napotykam ten sam problem i otrzymuję ten błąd z następującego: 'SqlDataReader reader = cmd.ExecuteReader();' –