Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Algorytm pozwalający uniknąć wstrzykiwania SQL na MSSQL Server z kodu C#?

Nie jest potrzebny żaden algorytm — po prostu nie używaj konkatenacji ciągów do tworzenia instrukcji SQL. Zamiast tego użyj kolekcji SqlCommand.Parameters. Wykonuje wszystkie niezbędne ucieczki wartości (takie jak zastąpienie ' z '' ) i zapewnia, że ​​polecenie będzie bezpieczne, ponieważ ktoś inny (np. Microsoft) wykonał wszystkie testy.

np. wywołanie procedury składowanej:

using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand("MySprocName", connection))
{
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@Param1", param1Value);
    return command.ExecuteReader();
}

Ta technika działa również w przypadku wbudowanych instrukcji SQL, np.

var sql = "SELECT * FROM MyTable WHERE MyColumn = @Param1";
using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand(sql, connection))
{
    command.Parameters.AddWithValue("@Param1", param1Value);
    return command.ExecuteReader();
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak możesz nazwać tabele zestawu danych, które zwracasz w przechowywanej procedurze?

  2. Pisanie rekurencyjnego CTE przy użyciu składni Entity Framework Fluent lub składni wbudowanej

  3. Tworzenie wyzwalaczy audytu w SQL Server

  4. Podstawy dziennika transakcji SQL Server

  5. Kolejność wykonania zapytania SQL