Cómo guardar texto con comillas del cuadro de texto para acceder a la base de datos

programación


Hola a todos,
Estoy desarrollando una aplicación que permite al usuario completar un formulario con texto.
Por eso uso cuadros de texto.
Puedo guardar los datos contenidos en los cuadros de texto en una base de datos de Access, pero hay un problema cuando el texto contiene comillas simples (‘) o dobles (“).

¿Cómo puedo solucionar el problema?

Gracias

Precisión: es una aplicación de escritorio WinForm en C#

Lo que he probado:

usar Texbox1.Text no funciona ya que las comillas aparecen en el comando SQL y se interpretan como parte del comando y no como datos

aquí el código

C#
OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Historique_Rdv.accdb");
connection.Open();

string command = "INSERT INTO RendezVous " +
    "(IDAnimal, NumeroRdv, DateRdv, Prestation, Temps, ComplementInfo, Paye, IDProprietaire)  " +
    "VALUES(" + int.Parse(TB_idAnimalNewRdv.Text) + ", " + int.Parse(TB_numeroRdvNouveauRdv.Text) + ", '" + TB_dateNouveauRdv.Text + "', '" + TB_actionNouveauRdv.Text + "', '" + TB_tempsNouveauRdv.Text + "', '" + TB_complementInfoNouveauRdv.Text + "', " + int.Parse(TB_payeNouveauRdv.Text) + ", " + int.Parse(TB_idProprietaireNewRdv.Text) + " )";

OleDbCommand cmdd = new OleDbCommand(command, connection);
cmdd.ExecuteNonQuery();

connection.Close();

Solución 2

Cita:

Puedo guardar los datos contenidos en los cuadros de texto en una base de datos de Access, pero hay un problema cuando el texto contiene comillas simples (‘) o dobles (“).

Probablemente esto esté relacionado con la forma en que intenta guardar el texto.
Debería leer sobre la vulnerabilidad de inyección SQL.

Nunca cree una consulta SQL concatenando cadenas. Tarde o temprano, lo hará con las entradas del usuario, y esto abre la puerta a una vulnerabilidad llamada “inyección SQL”, que es peligrosa para su base de datos y propensa a errores.
Una comilla simple en un nombre y su programa falla. Si un usuario ingresa un nombre como “Brian O’Conner” puede bloquear su aplicación, es una vulnerabilidad de inyección SQL, y el bloqueo es el menor de los problemas, una entrada de usuario malicioso y se promueve a comandos SQL con todas las credenciales.
Inyección SQL – Wikipedia[^]
Inyección SQL[^]
Ataques de inyección SQL por ejemplo[^]
PHP: Inyección SQL – Manual[^]
¿Cómo puedo explicar la inyección SQL sin jerga técnica? – Intercambio de pilas de seguridad de la información[^]

Solución 3

La razón por la que su código actual no funciona es porque está utilizando la concatenación de cadenas para crear la consulta SQL INSERT. ¡¡¡NUNCA HAGAS ESTO!!!

Utilice consultas parametrizadas en su lugar. De esta manera, las comillas dobles de su texto se escapan correctamente en lugar de interpretarse como parte de su declaración SQL.

Una vez que haya terminado de leer los enlaces en la Solución 2, busque en Google “consultas parametrizadas en C# sql” para encontrar información sobre cómo crear objetos de parámetros para sus preguntas y colocar los marcadores de posición de los parámetros en su declaración SQL.

Ah, y harás que sea mucho más fácil depurar tu código SQL cuando hagas esto también.

コメント

タイトルとURLをコピーしました