我正在尝试将数据插入名为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);
}
}
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
ansat(vagtplan)
(
[ansatID, Navn, Efternavn, Adresse, Email, Mobilnr]
) values (@ansatID, @Navn, @Efternavn, @Adresse, @Email, @Mobilnr)";
INSERT
语句的语法是:Insert into <tableName>(<column1>,<column2>) Values(<column1Value>,<column2Value>);
INSERT
声明的表名似乎错了。似乎ansat
是架构名称,vagtplan
是表名,它应该像ansat.vagtplan
或[ansat].[vagtplan]
[column1],[column2]
。您已在一个[]
中添加了所有列;那是错的。右键单击SQL Server Management Studio中的表,然后单击脚本,然后插入脚本。这将为您提供一个SQL插入脚本,用于插入表中。您可以使用此脚本作为创建代码的基础。
感谢所有的回复:)我已经想出来了,它现在有效,但另一个问题已经发生。现在我正在尝试通过外键将数据插入到彼此相关的两个表中。表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);
}
}
}