Так что я получаю эту ошибку все время. Я не уверен, что проблема в SQL-сервере или просто в моих навыках кодирования. Этот код для вставки данных в базу данных.
Отправить помощь.
Я получаю это сообщение во время выполнения кода
private void registracija_btn_Click(object sender, EventArgs e)
{
string RegistracijaUporabnisko = RegistracijaUporabnisko_txt.Text;
string RegistracijaGeslo = RegistracijaGeslo_txt.Text;
string RegistracijaMail = RegistracijaMail_txt.Text;
try
{
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES(" + RegistracijaUporabnisko + ", " + RegistracijaGeslo + ", " + RegistracijaMail + ")";
using (SqlCommand command = new SqlCommand(queryReg, con))
{
con.Open();
command.ExecuteNonQuery();
con.Close();
}
}
catch (Exception ex)
{
MessageBox.Show("Napaka: " + ex);
}
}
Давайте посмотрим на ваш код:
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES(" + RegistracijaUporabnisko + ", " + RegistracijaGeslo + ", " + RegistracijaMail + ")";
using (SqlCommand command = new SqlCommand(queryReg, con))
{
con.Open();
command.ExecuteNonQuery();
con.Close();
}
Итак, если RegistracijaUporabnisko
имеет значение Rok, RegistracijaGeslo
- значение Rok, а RegistracijaMail
- значение Rok @home. Как теперь выглядит ваша строка? Что ж
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) VALUES(Rok,Rok,Rok@home)";
Рок, который он будет искать, это поле, а не значение. Отсюда и неверный столбец.
Так что, если вы сделали это общепринятым способом
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) VALUES(@RegistracijaUporabnisko ,@RegistracijaGeslo ,@email)";
using (SqlCommand command = new SqlCommand(queryReg, con))
{
command.Parameters.AddWithValue("@RegistracijaUporabnisko ", RegistracijaUporabnisko );
command.Parameters.AddWithValue("@RegistracijaGeslo ", RegistracijaGeslo );
command.Parameters.AddWithValue("@email", email);
con.Open();
command.ExecuteNonQuery();
con.Close();
}
Что происходит сейчас? Ну, за кулисами текст вводится с кавычками вокруг него, даты отправляются в соответствующем формате, нумерация всего этого... обрабатывается для вас. Он защищает вас от инъекций, поэтому, если я "; drop table uporabnik2
имя "; drop table uporabnik2
вы не потеряете таблицу и т.д.
Параметры (ниже) исправляют это и ряд других проблем, включая внедрение SQL, i18n/l10n и т.д. Также возможно, что вы просто опечатали имя столбца, и в этом случае мы не можем помочь вам с этим как мы не знаем настоящее имя.
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES(@uporabnisko_ime, @geslo, @email)";
using (SqlCommand command = new SqlCommand(queryReg, con))
{
con.Open();
command.Parameters.AddWithValue("@uporabnisko_ime", RegistracijaUporabnisko_txt.Text);
command.Parameters.AddWithValue("@geslo", RegistracijaGeslo_txt.Text);
command.Parameters.AddWithValue("@email", RegistracijaMail_txt.Text);
con.Close();
}
Я также никогда не устану рекомендовать такие инструменты, как Dapper, для таких вещей:
con.Execute("INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES(@uporabnisko_ime, @geslo, @email)", new {
uporabnisko_ime = RegistracijaUporabnisko_txt.Text,
geslo = RegistracijaGeslo_txt.Text,
email = RegistracijaMail_txt.Text });
который делает все, включая (при необходимости) открытие/закрытие соединения, построение команды, упаковку параметров и т.д.
пытаться
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
"VALUES('" + RegistracijaUporabnisko + "', '" + RegistracijaGeslo + "', '" + RegistracijaMail + "')";
Как правило, вам нужно только заключить значение данных строкового типа, однако для большей безопасности всегда заключайте значение в одиночную кавычку в операторе вставки
geslo
недопустимо / не найдено в таблицеuporabnik2
Проверьте вашу таблицу / имя столбца.