如何修复Winforms应用程序中SQL查询中的错误

时间:2019-04-13 17:54:17

标签: c# sql sql-server winforms insert

我正在尝试将数据插入称为ansat(vagtplan)的表中。我目前正在编写一个使用SQL Server数据库的WinForms应用程序,但是仍然出现错误,并且在代码中看不到错误所在。

我认为SQL查询一定是错误的,因为当我尝试按按钮向表中插入数据时,会出现以下错误消息:

  

“ ansatID,Navn,Efternavn,Adresse,电子邮件,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 个答案:

答案 0 :(得分:1)

insert语句错误。应该是这样的:

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

无需将数据库指定为连接字符串中已提及的数据库。

答案 1 :(得分:1)

您可以尝试以下查询:

 new AddReminderActivity().notifyInAdv(mReceivedID, intent);

答案 2 :(得分:0)

问题出在您的命令文本"INSERT INTO ansat(vagtplan) ( [ansatID, Navn, Efternavn, Adresse, Email, Mobilnr] ) values (@ansatID, @Navn, @Efternavn, @Adresse, @Email, @Mobilnr)"; < / p>

INSERT语句语法为:Insert into <tableName>(<column1>,<column2>) Values(<column1Value>,<column2Value>);

  1. 您的INSERT语句的表名似乎错误。看来ansat是架构名称,vagtplan是表名称,应该像ansat.vagtplan[ansat].[vagtplan]
  2. 列名应类似于[column1],[column2]。您已将所有列添加到单个[]中;那是错误的。

答案 3 :(得分:0)

右键单击SQL Server Management Studio中的表,然后单击脚本,然后将INSERT插入脚本。这将为您提供一个用于插入表中的SQL插入脚本。您可以使用此脚本作为创建代码的基础。

答案 4 :(得分:0)

感谢所有答复:)我已经弄清楚了它现在可以使用,但是出现了另一个问题。现在,我试图通过外键将数据插入到彼此相关的两个表中。表dbo.Ansatte有一个主键,称为ansatID,表dbo.Login_data有一个主键,其名称为brugerID和外键AnsatID,它们引用表dbo.Ansatte中的主键ansatID。当查询运行时,两个表中的主键将以增量方式插入。我尝试将IDENTITY_INSERT设置为ON(在ms sql服务器管理工​​作室中),但是它没有帮助,因为我仍然收到IDENTITY_INSERT设置为OFF的错误消息。问题是,运行查询后,尽管外键AnsatID引用了表dbo.Ansatte中称为ansatID的主键,但表dbo.Login_data中的外键AnsatID仍然为NULL。期望的结果是表dbo.Login_data中的外键AnsatID与表dbo.Ansatte中的主键ansatID具有相同的值。这也显示在下面的图片中: enter image description here

那么,如何从主键转换为外键? 这是我的代码:

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);
            }


        }
    }