¿Qué es un & # 8220; parámetro de consulta & # 8221; en C ++?
-
08-07-2019 - |
Pregunta
Estábamos usando stringstream para preparar consultas seleccionadas en C ++. Pero se nos recomienda utilizar PARÁMETROS DE CONSULTA para enviar consultas sql db2 para evitar el uso de stringstream. ¿Alguien puede compartir qué significa exactamente el parámetro de consulta en C ++? Además, comparta algunos fragmentos de código de muestra prácticos.
Agradezco la ayuda por adelantado.
Editar: es secuencia de cadena y no secuencia de secuencia.
Gracias Mathew Liju
Solución
Sospecho que esto se refiere a consultas parametrizadas en general, en lugar de construir la consulta en una cadena, proporcionan variables sql (o parámetros) y luego pasan esas variables por separado. Estos son mucho mejores para manejar los ataques de inyección SQL. Para ilustrar con un ejemplo:
"SELECT * FROM Customers WHERE CustomerId = " + _customerId;
Es malo, mientras que esto:
"SELECT * FROM Customers where CustomerId = @CustomerId"
es bueno. El problema es que debe agregar los parámetros al objeto de consulta (no sé cómo se hace esto en C ++.
Referencias a otras preguntas:
- https://stackoverflow.com/questions / 1973 / cuál es la mejor manera de evitar los ataques de inyección de SQL
- Procedimientos almacenados frente a consultas parametrizadas
Wild Wild Web:
Otros consejos
La consulta SQL en forma de consulta parametrizada es segura que el formato de cadena para evitar el ataque de inyección SQL. Ejemplo de consulta parametrizada
StringBuilder sqlstr = new StringBuilder();
cmd.Parameters.AddWithValue("@companyid", CompanyID);
sqlstr.Append("SELECT evtconfigurationId, companyid,
configname, configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid=@companyid ");
Ejemplo de formato de cadena de consulta
StringBuilder sqlstr = new StringBuilder();
sqlstr.Append("SELECT evtconfigurationId, companyid, configname,
configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid" + CompanyID);