2009-03-11 15 views

Respuesta

31

Debe utilizar un parámetro como en:

SQLiteCommand cmd = _connection.CreateCommand(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = "SELECT * FROM MyTable WHERE MyColumn = @parameter"; 
cmd.Parameters.Add(new SQLiteParameter("@parameter", textfield)); 
SQLiteDataReader reader = cmd.ExecuteReader(); 

El uso de un SQL parametrizado escapará a todos los valores de entrada y ayudará a protegerse de los ataques de inyección SQL.

+0

¿Qué hago si tengo múltiples params? Qué escribo cmd.CommandText =" insert ... @parameter ... @parameter "; cmd.Parameters.Add (...); cmd.Parameters.Add (...);? –

+0

Sí, también debe haber un método AddRange disponible donde puede pasar una matriz de parámetros que coinciden con los parámetros en el sql statemenet. –

+0

Puede llamar a Parameters.Add varias veces al igual que ha pedido o utilizar los parámetros.AddRange que acepta una matriz de parámetros. – bstoney

0

También puede reemplazar todos los delimitadores de comillas simples con la duda comillas simples (no ").

sql = sql.Replace("'","''"); 
+2

Este método no es re encomiado, puede conducir a errores extraños. – Palani

+0

No necesariamente. Si construye su SQL y hace que Reemplazar el último paso, todo debería ser bueno. Trabajó por años sin problemas. Uso los bloques de aplicaciones ahora, así que no importa. :) – klkitchens

+0

este método es bueno si necesita crear un SQL seguro para volcar a un archivo de texto o similar. –