【发布时间】:2016-08-17 09:20:36
【问题描述】:
我正在使用 C# 编写一个 Windows 窗体项目。我正在尝试将多个记录从数组中插入 SQL Server 数据库。
进入第一行后出现异常
@UserID 已被声明。变量名称在查询批处理或存储过程中必须是唯一的。
数据库中的主键没有问题,因为UserID 不是主键。
这就是我想要做的。
public static void featuresentry()
{
SqlConnection connection = new SqlConnection(HandVeinPattern.Properties.Settings.Default.HandVeinPatternConnectionString);
SqlCommand command = new SqlCommand();
connection.Open();
try
{
command = connection.CreateCommand();
for (int i = 0; i < Details.modelKeyPoints.Size; i++)
{
command.CommandText = "INSERT INTO FEATURES(UserID, Angle, ClassID, Octave, PointX, PointY, Response, Size) VALUES(@UserID, @Angle, @ClassID, @Octave, @PointX, @PointY, @Response, @Size)";
command.Parameters.AddWithValue("@UserID", Details.ID);
command.Parameters.AddWithValue("@Angle", Convert.ToDouble(Details.modelKeyPoints[i].Angle));
command.Parameters.AddWithValue("@ClassID", Convert.ToDouble(Details.modelKeyPoints[i].ClassId));
command.Parameters.AddWithValue("@Octave", Convert.ToDouble(Details.modelKeyPoints[i].Octave));
command.Parameters.AddWithValue("@PointX", Convert.ToDouble(Details.modelKeyPoints[i].Point.X));
command.Parameters.AddWithValue("@PointY", Convert.ToDouble(Details.modelKeyPoints[i].Point.Y));
command.Parameters.AddWithValue("@Response", Convert.ToDouble(Details.modelKeyPoints[i].Response));
command.Parameters.AddWithValue("@Size", Convert.ToDouble(Details.modelKeyPoints[i].Size));
command.ExecuteNonQuery();
}
}
catch (Exception)
{
throw;
}
finally
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
}
}
【问题讨论】:
-
我认为如果你将
command = connection.CreateCommand();放在你的 for 循环中,它会起作用。问题是你只循环命令参数,所以它试图向你现有的命令添加更多参数,但它们已经在那里了。所以你需要在每个循环中创建一个新命令。 -
@UnicornoMarley,是的,这就是问题所在。不错的收获,将其发布为答案。
-
另一种选择是将所有命令和参数创建移到循环之外,只更新值并在循环内执行。这样您就不会不断地创建新的对象实例。
-
@Unicorno 。谢谢您的帮助。它奏效了。
标签: c# sql-server database winforms