Как исправить ошибку в SQL-запросе в приложении Winforms - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь вставить данные в таблицу с именем ansat (vagtplan). В настоящее время я пишу приложение WinForms, которое использует базу данных SQL Server, но я все еще получаю ошибку, и я не могу видеть в коде, где ошибка.

Я думаю, что это должно быть ошибкой SQL-запроса, потому что, когда я пытаюсь вставить данные в таблицу нажатием кнопки, я получаю следующее сообщение об ошибке:

Неверный синтаксис рядом с 'ansatID, Navn, Efternavn, Adresse, Email, Mobilnr'.

Желаемым результатом является окно сообщения с сохранением, которое подтвердит, что данные вставлены в таблицу ansat (vagtplan). Я много раз просматривал запрос, но не могу точно определить, где находится ошибка, поэтому мой вопрос: где находится ошибка? Может быть, запрос должен быть сформулирован по-другому? Вот код:

private void button1_Click(object sender, EventArgs e)
{
   try
    {
        String ConnectionString = @"Data Source=.\SQLEXPRESS01;Initial Catalog=Vagtplan;Integrated Security=True";
        SqlConnection myconnection = new SqlConnection(ConnectionString);
        myconnection.Open();

        SqlCommand AddCommand = myconnection.CreateCommand();
        AddCommand.CommandText = "INSERT INTO ansat(vagtplan) ([ansatID, Navn, Efternavn, Adresse, Email, Mobilnr]) VALUES (@ansatID, @Navn, @Efternavn, @Adresse, @Email, @Mobilnr)";

        AddCommand.Parameters.AddWithValue("@ansatID", textBox8.Text);
        AddCommand.Parameters.AddWithValue("@Navn", textBox1.Text);
        AddCommand.Parameters.AddWithValue("@Efternavn", textBox2.Text);
        AddCommand.Parameters.AddWithValue("@Adresse", textBox3.Text);
        AddCommand.Parameters.AddWithValue("@Email", textBox6.Text);
        AddCommand.Parameters.AddWithValue("@Mobilnr", textBox7.Text);

        AddCommand.ExecuteNonQuery();

        myconnection.Close();
        MessageBox.Show("Saved");
    } 
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Ответы [ 5 ]

1 голос
/ 13 апреля 2019

Оператор вставки неверен. Это должно быть примерно так:

INSERT INTO ansat(ansatID, Navn, Efternavn, Adresse, Email, Mobilnr) 
VALUES(@ansatID, @Navn, @Efternavn, @Adresse, @Email, @Mobilnr)

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

1 голос
/ 13 апреля 2019

Вы можете попробовать следующий запрос:

INSERT INTO vagtplan.dbo.ansat ([ansatID], [Navn], [Efternavn], [Adresse], [Email], [Mobilnr]) values (@ansatID, @Navn, @Efternavn, @Adresse, @Email, @Mobilnr)
0 голосов
/ 14 апреля 2019

Спасибо за все ответы :) Я понял это, и теперь это работает, но возникла другая проблема.Сейчас я пытаюсь вставить данные в две таблицы, связанные друг с другом через внешний ключ.Таблица dbo.Ansatte имеет первичный ключ с именем ansatID, а таблица dbo.Login_data имеет первичный ключ с именем brugerID и внешний ключ AnsatID, которые ссылаются на первичный ключ ansatID в таблице dbo.Ansatte.Первичный ключ в обеих таблицах вставляется постепенно, когда выполняется запрос.Я попытался установить IDENTITY_INSERT на ON (в MS SQL Server Studio Management Studio), но это не помогает, так как я все еще получаю сообщение об ошибке, что IDENTITY_INSERT установлен на OFF.Проблема заключается в том, что после выполнения запроса внешний ключ AnsatID в таблице dbo.Login_data по-прежнему равен NULL, несмотря на то, что внешний ключ AnsatID ссылается на первичный ключ с именем ansatID в таблице dbo.Ansatte.Желаемый результат заключается в том, что внешний ключ AnsatID в таблице dbo.Login_data имеет то же значение, что и первичный ключ ansatID в таблице dbo.Ansatte.Это также показано на рисунке ниже: введите здесь описание изображения

Итак, как определить значение из первичного ключа во внешнем ключе?Вот мой код:

private void button1_Click(object sender, EventArgs e)
    {
        {
            try
            {
                String ConnectionString = @"Data Source=.\SQLEXPRESS01;Initial Catalog=Vagtplan;Integrated Security=True";
                SqlConnection myconnection = new SqlConnection(ConnectionString);
                myconnection.Open();

                SqlCommand AddWorkerCommand = myconnection.CreateCommand();
                AddWorkerCommand.CommandText = "INSERT INTO dbo.Ansatte ([Navn], [Efternavn], [Adresse], [Postnummer], [Bynavn], [Email], [Mobilnr]) VALUES ( @Navn, @Efternavn, @Adresse, @Postnummer, @Bynavn, @Email, @Mobilnr)";

                AddWorkerCommand.Parameters.AddWithValue("@Navn", textBox1.Text);
                AddWorkerCommand.Parameters.AddWithValue("@Efternavn", textBox2.Text);
                AddWorkerCommand.Parameters.AddWithValue("@Adresse", textBox3.Text);
                AddWorkerCommand.Parameters.AddWithValue("@Postnummer", textBox4.Text);
                AddWorkerCommand.Parameters.AddWithValue("@Bynavn", textBox5.Text);
                AddWorkerCommand.Parameters.AddWithValue("@Email", textBox6.Text);
                AddWorkerCommand.Parameters.AddWithValue("@Mobilnr", textBox7.Text);
                AddWorkerCommand.ExecuteNonQuery();

                SqlCommand AddUserCommand = myconnection.CreateCommand();
                AddUserCommand.CommandText = "INSERT INTO dbo.Login_data ([Brugernavn], [Adgangskode], [Brugertype]) VALUES ( @Brugernavn, @Adgangskode, @Brugertype)";

                AddUserCommand.Parameters.AddWithValue("@Brugernavn", textBox10.Text);
                AddUserCommand.Parameters.AddWithValue("@Adgangskode", textBox9.Text);
                AddUserCommand.Parameters.AddWithValue("@Brugertype", textBox8.Text);
                AddUserCommand.ExecuteNonQuery();

                myconnection.Close();
                MessageBox.Show("Saved");
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }


        }
    }
0 голосов
/ 14 апреля 2019

Щелкните правой кнопкой мыши таблицу в SQL Server Management studio, затем сценарий, а затем ВСТАВЬТЕ в сценарий.Это даст вам SQL-скрипт для вставки в вашу таблицу.Вы можете использовать этот скрипт в качестве основы для создания своего кода.

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

Проблема связана с текстом вашей команды "INSERT INTOansat(vagtplan) ([ansatID, Navn, Efternavn, Adresse, Email, Mobilnr]) values (@ansatID, @Navn, @Efternavn, @Adresse, @Email, @Mobilnr)";

INSERT Синтаксис оператора:Insert into <tableName>(<column1>,<column2>) Values(<column1Value>,<column2Value>);

  1. Имя таблицы вашего оператора INSERT кажется неправильным.Кажется, ansat - это имя схемы, а vagtplan - это имя таблицы, оно должно быть похоже на ansat.vagtplan или [ansat].[vagtplan]
  2. Имена столбцов должны быть похожи на [column1],[column2].Вы добавили все столбцы в один [];это неправильно.
...