Saltar al contenido

Error de sql de nombre de columna no válido

Necesitamos tu ayuda para difundir nuestros artículos acerca de las ciencias de la computación.

Solución:

Probablemente necesite citas sobre esos string campos, pero ¡Deberías usar consultas parametrizadas!

cmd.CommandText = "INSERT INTO Data ([Name],PhoneNo,Address) VALUES (@name, @phone, @address)";
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@name", txtName.Text);
cmd.Parameters.AddWithValue("@phone", txtPhone.Text);
cmd.Parameters.AddWithValue("@address", txtAddress.Text);
cmd.Connection = connection;

Por cierto, su consulta original podría haberse arreglado así (tenga en cuenta las comillas simples):

"VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";

pero esto lo habría hecho vulnerable a los ataques de inyección SQL ya que un usuario podría escribir

'; drop table users; -- 

en uno de sus cuadros de texto. O, más mundanamente, el pobre Daniel O’Reilly rompería su consulta cada vez.

Siempre trate de usar consultas sql parametrizadas para mantenerse a salvo de ocurrencias maliciosas, por lo que podría reorganizar su código como se muestra a continuación:

También asegúrese de que su tabla tenga coincidencias de nombre de columna con Name, PhoneNo ,Address.

using (SqlConnection connection = new SqlConnection(connectionString))

    SqlCommand cmd = new SqlCommand("INSERT INTO Data (Name, PhoneNo, Address) VALUES (@Name, @PhoneNo, @Address)");
    cmd.CommandType = CommandType.Text;
    cmd.Connection = connection;
    cmd.Parameters.AddWithValue("@Name", txtName.Text);
    cmd.Parameters.AddWithValue("@PhoneNo", txtPhone.Text);
    cmd.Parameters.AddWithValue("@Address", txtAddress.Text);
    connection.Open();
    cmd.ExecuteNonQuery();

Cambia esta línea:

cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES (" + txtName.Text + "," + txtPhone.Text + "," + txtAddress.Text + ");";

a esto:

cmd.CommandText = "INSERT INTO Data (Name,PhoneNo,Address) VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";

Su comando de inserción espera texto, y necesita comillas simples (‘) entre el valor real para que SQL pueda entenderlo como texto.

EDITAR: Para aquellos de ustedes que no estén contentos con esta respuesta, me gustaría señalar que hay un problema con este código en lo que respecta a la inyección de SQL. Cuando respondí esta pregunta, solo consideré la pregunta en cuestión, que era la comilla simple que faltaba en su código, y señalé cómo solucionarlo. Adam ha publicado una respuesta mucho mejor (y voté por ella), donde explica los problemas con la inyección y muestra una forma de prevenir. Ahora relájense y sean felices chicos.

Reseñas y valoraciones del artículo

Si para ti ha resultado provechoso nuestro post, agradeceríamos que lo compartas con más seniors así nos ayudas a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *