我道歉,我知道这个问题突然出现了,但是我害怕我只是不理解我已经读过的关于这个问题的答案,并希望有人可以清理一下为了我。
我有三张桌子:
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_Ingredients
和Ingredient
表之间的关系。
有人可以,请帮助我吗?我读过的所有解释都没有用。如果我做错了,请告诉我。
答案 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;
}