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

C# 如何修复Winforms应用程序中SQL查询中的错误,c#,sql,sql-server,winforms,insert,C#,Sql,Sql Server,Winforms,Insert,我试图将数据插入一个名为ansat(vagtplan)的表中。我目前正在编写一个使用SQL Server数据库的WinForms应用程序,但仍然出现了一个错误,我无法在代码中真正看到错误所在 我认为,这一定是SQL查询中的错误,因为当我尝试按按钮向表中插入数据时,会收到以下错误消息: “ansatID、Navn、Efternavn、ADRESE、Email、Mobilnr”附近的语法不正确 所需的结果是一个带有“Saved”的消息框,它将确认数据已插入表ansat(vagtplan)。我已经检查

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

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

“ansatID、Navn、Efternavn、ADRESE、Email、Mobilnr”附近的语法不正确

所需的结果是一个带有“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);
    }
}

问题在于您的命令文本
“插入到
[ansatID,Navn,Efternavn,adrese,Email,Mobilnr]
)值(@ansatID,@Navn,@Efternavn,@adrese,@Email,@Mobilnr)”

INSERT
语句语法为:
INSERT-into(,)值(,)

  • 您的
    INSERT
    语句的表名似乎有误。似乎
    ansat
    是模式名,
    vagtplan
    是表名,它应该像
    ansat.vagtplan
    [ansat].[vagtplan]
  • 列名应该类似于
    [column1],[column2]
    。您已在单个
    []
    中添加了所有列;那是错误的

  • 问题在于您的命令文本
    “插入到
    [ansatID,Navn,Efternavn,adrese,Email,Mobilnr]
    )值(@ansatID,@Navn,@Efternavn,@adrese,@Email,@Mobilnr)”

    INSERT
    语句语法为:
    INSERT-into(,)值(,)

  • 您的
    INSERT
    语句的表名似乎有误。似乎
    ansat
    是模式名,
    vagtplan
    是表名,它应该像
    ansat.vagtplan
    [ansat].[vagtplan]
  • 列名应该类似于
    [column1],[column2]
    。您已在单个
    []
    中添加了所有列;那是错误的

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

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

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

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

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

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

    您可以尝试以下查询:

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

    您可以尝试以下查询:

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

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

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

    谢谢大家的回复:)我已经想好了,现在可以用了,但是又出现了一个问题。现在,我试图通过外键将数据插入到彼此相关的两个表中。表dbo.Ansatte有一个名为ansatID的主键,表dbo.Login\u data有一个名为brugerID的主键和外键ansatID,它们引用表dbo.Ansatte中的主键ansatID。当查询运行时,两个表中的主键都以增量方式插入。我已尝试将IDENTITY_INSERT设置为ON(在ms sql server management studio中),但没有帮助,因为我仍然收到错误消息,即IDENTITY_INSERT设置为OFF。问题是,在运行查询之后,表dbo.Login_data中的外键AnsatID仍然为NULL,尽管外键AnsatID引用了表dbo.Ansatte中名为AnsatID的主键。期望的结果是表dbo.Login_数据中的外键AnsatID与表dbo.Ansatte中的主键AnsatID具有相同的值。下图也显示了这一点:

    那么,如何将值从主键转换为外键呢? 这是我的密码:

    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);
                }
    
    
            }
        }
    
    感谢所有的回复:)我已经弄明白了,现在它可以工作了,但是另一个问题发生了。现在,我试图通过外键将数据插入到彼此相关的两个表中。表dbo.Ansatte有一个名为ansatID的主键,表dbo.Login\u data有一个名为brugerID的主键和外键ansatID,它们引用表dbo.Ansatte中的主键ansatID。当查询运行时,两个表中的主键都以增量方式插入。我已尝试将IDENTITY_INSERT设置为ON(在ms sql server management studio中),但没有帮助,因为我仍然收到错误消息,即IDENTITY_INSERT设置为OFF。问题是,在运行查询之后,表dbo.Login_data中的外键AnsatID仍然为NULL,尽管外键AnsatID引用了表dbo.Ansatte中名为AnsatID的主键。期望的结果是表dbo.Login_数据中的外键AnsatID与表dbo.Ansatte中的主键AnsatID具有相同的值。下图也显示了这一点:

    那么,如何将值从主键转换为外键呢? 这是我的密码:

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

    您不需要在表名之后指定数据库名。(vagtplan)并且在列列表的开头和结尾处不放方括号。如果您想使用它们,请将它们放在每个列名[ansatID]、[Navn]、…您还应该处理连接(以及DBCommand对象),并避免使用
    AddWithValue()
    [ansatID、Navn、eTernavn、Adrese、Email、Mobilnr]
    将意味着名称为
    ansatID、Navn、eTernavn、Adrese、,电子邮件,手机号码
    ;我怀疑这就是你想要的。哟