C#无法将记录插入我的数据库

时间:2018-03-06 23:14:38

标签: c# sql-server database insert

SqlConnection cnn = new SqlConnection(Properties.Settings.Default.cnnString);
cnn.Open();

cmd = new SqlCommand(@"INSERT INTO Participant (ParticipantId, LastName, FirstName, Country, Rank, Gender, IACMember) 
                       VALUES (@ParticipantId, @LastName, @FirstName, @Country, @Rank, @Gender, @IACMember)", cnn);

// cmd.Parameters.AddWithValue("@ParticipantId", notnull);
cmd.Parameters.AddWithValue("@LastName", txtLastName.Text.ToString());
cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text);
cmd.Parameters.AddWithValue("@Country", cbHomeCountry.SelectedItem.ToString());
cmd.Parameters.AddWithValue("@Rank", txtRank.Text);
cmd.Parameters.AddWithValue("@Gender", txtGender.Text);
cmd.Parameters.AddWithValue("@IACMember", chkMember.Checked);

cmd.ExecuteNonQuery();

cnn.Close();

我不断收到错误消息:

  

“System.Data.SqlClient.SqlException:'必须声明标量变量”@ParticipantId“。' “

我尝试了多种方式,并且一直试图解决这个问题一周。我不明白我的代码中的错误是什么。

以下更新版本:

SqlConnection cnn = new SqlConnection(Properties.Settings.Default.cnnString);
cnn.Open();

cmd = new SqlCommand(@"INSERT INTO Participant (LastName, FirstName, Country, Rank, Gender, IACMember) 
                       VALUES (@LastName, @FirstName, @Country, @Rank, @Gender, @IACMember)", cnn);

//cmd.Parameters.AddWithValue("@ParticipantId", );    
cmd.Parameters.AddWithValue("@LastName", txtLastName.Text.ToString());
cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text);
cmd.Parameters.AddWithValue("@Country", cbHomeCountry.SelectedItem.ToString());
cmd.Parameters.AddWithValue("@Rank", txtRank.Text);
cmd.Parameters.AddWithValue("@Gender", txtGender);
cmd.Parameters.AddWithValue("@IACMember", chkMember.Checked);

int nextKey;

cmd = new SqlCommand("SELECT MAX(ParticipantId) FROM Participant", cnn);
nextKey = (int)cmd.ExecuteScalar() + 1;
// cmd.ExecuteNonQuery();

cnn.Close();

1 个答案:

答案 0 :(得分:1)

如果列ParticipantId被标记为Identity然后您不应该尝试手动在其中插入数据,sql server将根据上次使用的ParticipantId填充它,因此您应该从insert语句中删除该列并删除id参数。

如果它只是一个主键,那么你需要为每一行手动插入唯一值。

上面提到的错误是因为注释行应该为ParticipantId参数提供一个值