使用连接和联结表插入多个表

时间:2016-04-12 14:18:48

标签: c# asp.net-mvc sql-server-2012

我道歉,我知道这个问题突然出现了,但是我害怕我只是不理解我已经读过的关于这个问题的答案,并希望有人可以清理一下为了我。

我有三张桌子:

Recipes (ID int primary identity, RecipeName varchar(20), Directions varchar(max), RecIngID int)

Ingredients (ID int primary identity, IngredientName varchar(30), Quantity int)

和联结表Recipe_Ingredients (RecipeID int foreign key references Recipe(ID), IngredientID int foreign key references Ingredient(ID)

现在,我要说,我需要为所有内容创建存储过程(因为我使用asp.net MVC 4和C#创建了一个ntier程序,等等等等等等。

但是我不知道如何编写用于在表中插入新配方的存储过程,并考虑联结表Recipe_IngredientsIngredient表之间的关系。

有人可以,请帮助我吗?我读过的所有解释都没有用。如果我做错了,请告诉我。

1 个答案:

答案 0 :(得分:0)

为每种成分调用此存储过程

create procedure insertIngredients
(
    @name varchar,
    @quantity int
)
as
insert into Ingredients (IngredientName, Quantity)
values (@name, @quantity)

select SCOPE_IDENTITY()

插入成分并返回新插入的ID。 将id存储到某个变量中(即List或逗号分隔的字符串)。 之后,插入食谱调用程序:

create procedure insertRecipe
(
    @name varchar,
    @directions varchar(max),
    @RecIngID int
)
as
insert into Recipes (RecipeName, Directions, RecIngID)
values (@name, @directions, @RecIngID)

select SCOPE_IDENTITY()

还保存插入后该过程返回的ID。 并且,最后一步使用配方ID和之前插入的所有成分ID将数据插入到联结表中。

create procedure insertRecipeIngredients
(
    @recipeID int,
    @ingredientID int
)
as
insert into Recipe_Ingredients (RecipeID, IngredientID)
values (@recipeID, @ingredientID)

select SCOPE_IDENTITY()

在你的c#代码调用程序中这样:

public int InsertIngredient(string name, int quantity)
{
    SqlConnection conn = new SqlConnection("[your connection string goes here]");

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;
    cmd.CommandText = "insertIngredients";
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.AddWithValue("@name", name);
    cmd.Parameters.AddWithValue("@quantity", quantity);

    conn.Open();

    int newlyInsertedId = (int) cmd.ExecuteScalar();

    if (conn.State == System.Data.ConnectionState.Open) 
    conn.Close();

    return newlyInsertedId;
}