我有一个Database named: "alumno"
,其中包含以下列:
"rut" (varchar 30) PK
"nombre" (varchar 30)
"apellido" (varchar 30)
"fechaN" (varchar 15)
所有这些都没有空函数。
每当我输入字母时,我都会收到一个SQLException,说“fechaN”列的名称无效,但如果输入数字,它就会运行得很好。这是我的代码:
public Boolean insertar(SqlConnection x, alumno a) {
String query = "INSERT INTO alumno (rut, nombre, apellido, fechaN) VALUES ('" + a.Rut + "','" + a.Nombre + "','" + a.Apellido + "'," + a.Fecha + ")";
comando = new SqlCommand(query, x);
int saber = comando.ExecuteNonQuery();
if (saber > 0) {
return true;
}
return false;
}
con = new conexion();
SqlConnection x = con.conectar();
String rut = txtRut.Text.Trim();
String nombre = txtNombre.Text.Trim();
String apellido = txtApellido.Text.Trim();
String fecha = txtfecha.Text.Trim();
alumno a = new alumno(rut, nombre, apellido, fecha);
try {
if (a.insertar(x, a)) {
MessageBox.Show("Ok");
} else {
MessageBox.Show("Error...");
}
} catch (SqlException ex) {
MessageBox.Show("..." + ex.Message);
}
}
con.desconectar();
x = null;
答案 0 :(得分:1)
正如用户Jeroen Heier在评论中指出的那样......我错过了一个'
这是最终查询
String query = "INSERT INTO alumno (rut, nombre, apellido, fechaN) VALUES ('" + a.Rut + "','" + a.Nombre + "','" + a.Apellido + "','" + a.Fecha + "')";
comando = new SqlCommand(query, x);
使用参数化查询:
String query = "INSERT INTO alumno (rut, nombre, apellido, fechaN) VALUES (@rut,@nombre,@apellido,@fechaN)";
comando = new SqlCommand(query, x);
comando.Parameters.AddWithValue("@rut", this.rut);
comando.Parameters.AddWithValue("@nombre", this.nombre);
comando.Parameters.AddWithValue("@apellido", this.apellido);
comando.Parameters.AddWithValue("@fechaN", this.fecha);
答案 1 :(得分:0)
你没有提到rdbms,但看起来是区分大小写的,所以对你的字段名称使用双引号与create table相同。或者将表格中的字段名称更改为"fechan"
。
"fechaN" (varchar 15)
"INSERT INTO alumno (rut, nombre, apellido, fechaN)
^^^^^^
是的,请改用参数,你很容易受到Sql Injection https://xkcd.com/327/
的攻击答案 2 :(得分:-1)
String query = "INSERT INTO alumno (rut, nombre, apellido, fechaN) VALUES ('" + a.Rut + "','" + a.Nombre + "','" + a.Apellido + "'," + a.Fecha + ")";
尝试不带单引号:
String query = "INSERT INTO alumno (rut, nombre, apellido, fechaN)
VALUES (" + a.Rut + "," + a.Nombre + "," + a.Apellido + ","
+ a.Fecha + ")";