O que é um “parâmetro de consulta” em C ++?
-
08-07-2019 - |
Pergunta
Estávamos usando stringstream para preparar consultas seleção em C ++. Mas nós foram fortemente aconselhados a usar parâmetros de consulta para enviar consultas SQL do DB2 para evitar o uso de stringstream. Alguém pode compartilhar o que exatamente quer dizer com parâmetro de consulta em C ++? Além disso, compartilhar alguns trechos de código de amostra prático.
Agradecemos a ajuda de antecedência.
Edit:. É stringstream e não strstream
Obrigado, Mathew Liju
Solução
Eu suspeito que isso se refere a consultas parametrizadas em geral, ao invés de construir a consulta em uma corda, eles fornecem variáveis ??SQL (ou parâmetros) e depois passar essas variáveis ??separadamente. Estes são muito melhor para lidar com ataques de injeção SQL. Para ilustrar com um exemplo:
"SELECT * FROM Customers WHERE CustomerId = " + _customerId;
é ruim, enquanto isso:
"SELECT * FROM Customers where CustomerId = @CustomerId"
é bom. O problema é que você tem que adicionar os parâmetros para o objeto de consulta (eu não sei como isso é feito em C ++.
As referências a outras perguntas:
- https://stackoverflow.com/questions / 1973 / what-é-o-melhor-way-to avoid-de injeção de SQL-ataques
- Stored Procedures vs parametrizadas consultas
Wild Wild Web:
Outras dicas
Sql consulta no parametrizado consulta forma é seguro de formato de cadeia para evitar ataque de injeção SQL. Exemplo de parametrizado consulta ??p>
StringBuilder sqlstr = new StringBuilder();
cmd.Parameters.AddWithValue("@companyid", CompanyID);
sqlstr.Append("SELECT evtconfigurationId, companyid,
configname, configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid=@companyid ");
Exemplo de formato de string de consulta ??p>
StringBuilder sqlstr = new StringBuilder();
sqlstr.Append("SELECT evtconfigurationId, companyid, configname,
configimage FROM SCEVT_CONFIGURATIONS ");
sqlstr.Append("WHERE companyid" + CompanyID);