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

问题描述 投票:0回答:5

我正在尝试将数据插入名为ansat(vagtplan)的表中。我目前正在编写一个使用SQL Server数据库的WinForms应用程序,但我仍然收到错误,我无法在代码中看到错误。

我认为,它必须是SQL查询的错误,因为当我尝试按下按钮向表中插入数据时,我收到以下错误消息:

“员工ID,姓名,姓氏,地址,电子邮件,手机号码”附近的语法不正确。

期望的结果是一个带有'Saved'的消息框,它将确认,数据被插入到表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);
    }
}
c# sql sql-server winforms insert
5个回答
1
投票

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

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

无需像连接字符串中已提到的那样指定数据库。


1
投票

您可以尝试以下查询:

INSERT INTO vagtplan.dbo.ansat ([ansatID], [Navn], [Efternavn], [Adresse], [Email], [Mobilnr]) values (@ansatID, @Navn, @Efternavn, @Adresse, @Email, @Mobilnr)

0
投票

问题在于您的命令文本"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]。您已在一个[]中添加了所有列;那是错的。

0
投票

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


0
投票

感谢所有的回复:)我已经想出来了,它现在有效,但另一个问题已经发生。现在我正在尝试通过外键将数据插入到彼此相关的两个表中。表dbo.Ansatte有一个名为ansatID的主键,表dbo.Login_data有一个名为brugerID的主键和外键AnsatID,它引用表dbo.Ansatte中的主键ansatID。当查询运行时,两个表中的主键都会逐步插入。我试图将IDENTITY_INSERT设置为ON(在ms sql server management studio中),但它没有帮助,因为我仍然收到IDENTITY_INSERT设置为OFF的错误消息。问题是,在运行查询之后,表dbo.Login_data中的外键AnsatID仍然为NULL,尽管表dbo.Ansatte中的外键AnsatID引用了名为ansatID的主键。期望的结果是表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);
            }


        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.