【发布时间】:2018-07-04 00:59:13
【问题描述】:
我想将数据从 LIST 保存到 SQL Server,但错误是:
变量名'@fname'已经被声明了
这是我的代码:
public void Save()
{
string insert = "Insert into Professor (fname, lname, dateOfBirth, gender, country, email, mdp) Values (@fname, @lname, @dateOfBirth, @gender, @country, @email, @mdp) ";
SqlCommand vide = new SqlCommand("Truncate table Professor", mode);
// Save data from LIST to SERVER
mode.Open();
// Truncate the Table
vide.ExecuteNonQuery();
// Save all data to SQL Server
SqlCommand cmd = new SqlCommand(insert, mode);
for(int i = 0; i < pf.Count; i++)
{
cmd.Parameters.AddWithValue("@fname", pf[i].fname);
cmd.Parameters.AddWithValue("@lname", pf[i].lname);
cmd.Parameters.AddWithValue("@dateOfBirth", pf[i].dateOfBirth);
cmd.Parameters.AddWithValue("@gender", pf[i].sexe);
cmd.Parameters.AddWithValue("@country", pf[i].country);
cmd.Parameters.AddWithValue("@email", pf[i].email);
cmd.Parameters.AddWithValue("@mdp", pf[i].password);
cmd.ExecuteNonQuery();
}
mode.Close();
MessageBox.Show("Your compte has been added!");
}
这是我将所有数据从 sql 保存到列表的上传功能
public void Upload()
{
pf.Clear();
mode.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM Professor", mode);
SqlDataReader myReader = cmd.ExecuteReader();
while (myReader.Read())
{
Professor p = new Professor(myReader["fname"].ToString(), myReader["lname"].ToString(),Convert.ToDateTime(myReader["dateOfBirth"].ToString()),myReader["country"].ToString(),myReader["gender"].ToString(),myReader["email"].ToString(),myReader["mdp"].ToString());
pf.Add(p);
}
mode.Close();
}
顺便说一句,我把truncate只是为了避免由于主键而导致重复数据的问题,这就是为什么我将所有sql数据保存到我的列表中,并且在这个函数中我想添加新数据以保存干净的数据到我的 SQL Server。
我该如何解决?
【问题讨论】:
-
您正在尝试将参数添加到循环中的命令。这将导致多次添加相同的参数,这就是您收到此错误的原因。您应该在循环之外添加参数,并在循环中设置它们的值。
-
Chetan Ranpariya 但是我该怎么做,请给我一个例子!!
-
如果您阅读了错误消息中的文字,它们会非常清楚地说明问题。在第一次通过循环时,添加参数。之后的每一次通过,它们都已经存在,你不能再次添加它们。错误消息不仅会占用屏幕上的空间。它们提供了有关问题的信息,但您实际上必须阅读它们才能使用这些信息。
-
感谢你们的cmets。
标签: c# sql sql-server visual-studio