マッパーテーブルに追加する方法があります。列は、Identity フィールド、CategoryId、および UnitId の 3 つだけです。後の 2 つは、他の 2 つのテーブルへの外部キーです。
私が持っているリストには、3 つの列がすべて含まれています (CategoryUnit は、データを格納する単なるクラスです)。
これをC#経由でDBに追加しています。これが私が持っているものです。
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' は既に宣言されています。変数名はクエリ バッチまたはストアド プロシージャ内で一意である必要があります。」
同様の以前の方法がありますが、問題はありませんでした。これをどうするかはよくわかりません。ところで、すべてのデータは重複のためにスクラブされます。どんなアイデアでも大歓迎です。