System.Data.SqlClient.SqlException: Неверное имя столбца (Ошибка в строке command.ExecuteNonQuery ();) - PullRequest
0 голосов
/ 13 февраля 2019

Так что я получаю эту ошибку все время.Я не уверен, что проблема в 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);
            }

    }

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Параметры (ниже) исправляют эту и ряд других проблем, включая внедрение 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 });

который делает все, включая (при необходимости) соединение открытия / закрытия, построение команды, упаковку параметров и т. д.

0 голосов
/ 13 февраля 2019

Давайте посмотрим на ваш код:

      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, вы не потеряете стол и т. Д.

0 голосов
/ 13 февраля 2019

попробовать

string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " +
                     "VALUES('" + RegistracijaUporabnisko + "', '" + RegistracijaGeslo + "', '" + RegistracijaMail + "')";

Как правило, вам нужно только заключить значение данных строкового типа, однако для большей безопасности всегда заключайте значение в одиночную кавычку в операторе вставки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...