Membangun kueri dengan cara ini membuatnya rentan terhadap serangan injeksi SQL kecuali jika Anda secara manual lolos dari input Anda (I.E. Membuat nilai 'projectID' tidak mungkin mengubah struktur kueri dengan menggunakan urutan pelarian khusus mesin database). Namun, cara yang disarankan untuk melakukannya adalah menggunakan kueri berparameter (terkadang disebut "Pernyataan yang Disiapkan"). Dengan kueri berparameter, Anda cukup menentukan struktur kueri dan kemudian memberikan nilai input secara terpisah sebagai parameter, mencegah struktur kueri Anda berubah melalui injeksi SQL.
Ini contoh Anda, diubah untuk menggunakan parameterisasi:
public DataSet GetProject(string projectID)
{
DataSet dataTable = new DataSet();
DataAccess dataAccess = new DataAccess();
OracleCommand commandOb = new OracleCommand();
strQuery = @"select projectName, managerName
from project
where projectID = :ProjectID"
cmd.CommandText = strQuery;
cmd.Parameters.AddWithValue("ProjectID", projectID);
dataTable = dataAccess.ExecuteDataAdapter(commandOb);
return dataTable;
}
Parameter ':ProjectID' dalam kueri akan diganti dengan nilai yang diberikan dalam metode 'AddWithValue'. Tidak peduli berapa nilai dalam variabel 'projectID', itu akan selalu dievaluasi sebagai bagian dari klausa WHERE. Bahwa sebelumnya, nilai yang mirip dengan ['; DELETE FROM project;--] dapat memiliki pengaruh yang tidak diinginkan dengan mengubah kueri Anda menjadi sebagai berikut:
select projectName, managerName
from project
where projectID = ''; DELETE FROM project;--'