2016-05-31 138 views
-1

我有一個Database named: "alumno"有以下的列:如何解決無效的列名稱?

"rut" (varchar 30) PK 
"nombre" (varchar 30) 
"apellido" (varchar 30) 
"fechaN" (varchar 15) 

所有的人都用NOT NULL功能。

每當我鍵入字母時,我會得到一個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

有什麼表 「alumno」 的模式? – dyagmin

+0

您是否有一些嵌入式單引號的值(例如,nombre) – Steve

+0

您一定要使用參數化查詢。它會讓你的生活更輕鬆,並且更安全。 –

回答

0

你沒有提到的RDBMS,不過貌似是大小寫敏感的,所以使用雙引號爲您的字段名稱與您創建表。或者將表中的字段名稱更改爲小寫字母"fechan"

"fechaN" (varchar 15) 

"INSERT INTO alumno (rut, nombre, apellido, fechaN) 
              ^^^^^^ 

是的,使用參數,而不是,你是容易受到SQL注入https://xkcd.com/327/

+0

SqlConnection是關於rdbms的強有力暗示。 – Steve

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

nombre與所有其他字段都是varchar字段。沒有引號,你只能傳遞數字 – Steve

+1

@Steve這些人從來沒有寫過SQL插入語句嗎?我對這些答案感到震驚。我輸了點! – FirebladeDan

+0

只要不討論法律討論的任何論壇。 ;-) –

1

隨着用戶的Jeroen黑爾在評論中指出。 。我錯過了一個'

這是最後的查詢

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

那麼今天將會爲你節省,但只是爲了好玩,試着插入一個帶有單引號的註冊表(例如O'Hara) – Steve

+0

是的,出現錯誤。我老師教我的蹩腳方法。 –

+0

檢查這個問題。 http://stackoverflow.com/questions/7505808/why-do-we-always-prefer-using-parameters-in-sql-statements –

相關問題