我有一种方法可以添加到映射器表中。只有 3 列:标识字段、CategoryId 和 UnitId。后两个是其他两个表的外键。
我拥有的列表包含其中的所有三列(CategoryUnit 只是一个存储数据的类)。
我通过 C# 将它添加到数据库中。这就是我所拥有的。
private static void ExecuteInsertsIntoCategory_Unit_MappingForSubCategories(
string sqlInsertStatement, SqlParameterCollection sqlParams,
List<CategoryUnit> categoryUnitData)
{
try
{
var counter = 0;
categoryUnitData = categoryUnitData.OrderBy(cud => cud.UnitId)
.ToList();
foreach (var categoryUnit in categoryUnitData)
{
//Get the parent category
var parentCategoryId = categoryUnit.CategoryId;
//Go through the categories and get the children of
//the parent category
var categoryIds = categoryData.Where(cd =>
cd.ParentCategoryId == parentCategoryId)
.Select(cd => cd.CategoryId)
.ToList();
//Get the unit
var unitId = categoryUnit.UnitId;
tempUnit = unitId;
if (categoryIds.Count > 0)
{
using (var sqlCommand =
new SqlCommand(sqlInsertStatement, sqlCon))
{
foreach (var categoryId in categoryIds)
{
tempCategory = categoryId;
foreach (SqlParameter sqlParam in sqlParams)
{
switch (sqlParam.ParameterName)
{
case "@CategoryId":
sqlCommand.Parameters
.AddWithValue
(sqlParam.ParameterName,
categoryId);
break;
case "@UnitId":
sqlCommand.Parameters
.AddWithValue
(sqlParam.ParameterName,
unitId);
break;
}
}
//Both must exist in order to add a record
if (categoryId != 0 && unitId != 0)
{
//Execute sql and clear out
sqlCon.Open();
sqlCommand.ExecuteNonQuery();
sqlCon.Close();
counter++;
}
}
}
}
}
Console.WriteLine(counter + " row(s) added to "
+ "Category_Unit_Mapping for "
+ "Subcategories");
}
//Something went wrong
catch (Exception ex)
{
Console.WriteLine("Error in SQL Insert Into "
+ "Category_Unit_Mapping for Subcategories: "
+ ex.Message);
}
//Close out sql connection
finally
{
if (sqlCon.State != ConnectionState.Closed) sqlCon.Close();
}
}
当我的代码到达此方法时,我收到以下错误。
“变量名‘@CategoryId’已被声明。变量名在查询批处理或存储过程中必须是唯一的。”
我以前有类似的方法,但它们没有任何问题。不太清楚该怎么做。顺便说一句,所有数据都被清除重复。任何想法,将不胜感激。