2016-05-31 4 views
-1

У меня есть 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

Что схема таблицы "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 + ")"; 

Try без одинарных кавычек:

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 insert? Я поражен этими ответами. Я теряю очки! – FirebladeDan

+0

Просто не заходите на любые форумы, где обсуждаются законы. ;-) –

1

Как пользователь Йерун 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

Хорошо, что спасет вас сегодня, но просто для забавы попробуйте вставить выпускник с nombre, который содержит одну цитату (например, O'Hara) – Steve

+0

Да, появляется ошибка. Этот метод помог мне учиться. –

+0

проверьте этот вопрос. http://stackoverflow.com/questions/7505808/why-do-we-always-prefer-using-parameters-in-sql-statements –

Смежные вопросы