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.