如何解决无效的列名?

时间:2016-05-31 20:02:17

标签: c# sql

我有一个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;

3 个答案:

答案 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 + ")";