我想在食谱中添加成分。为了做到这一点,我尝试过很多东西,但它并没有让人伤心。 想法:http://prntscr.com/dw8lom 我的数据库表:http://prntscr.com/dw8ms7
我的代码我曾用过添加食谱:
private void VoegReceptenToe()
{
string query = "INSERT INTO Recipe VALUES (@RecipeName, 30, 'goed mixen')";
using (connection = new SqlConnection(connectionstring))
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
command.Parameters.AddWithValue("@RecipeName", txtRecipeName.Text);
command.ExecuteScalar();
PopulateRecipes();
}
}
填充食谱:
{
string query = "SELECT a.Name FROM Ingredient a " +
"INNER JOIN Recipe_Ingredient b ON a.Id = b.IngredientId " +
"WHERE b.RecipeId = @RecipeId";
// de connectionstring hoef je niet te openen en te sluiten als,
// je een using statement gebruikt, dat doet hij vanzelf.
using (connection = new SqlConnection(connectionstring))
using (SqlCommand command = new SqlCommand(query,connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
command.Parameters.AddWithValue("@RecipeId", lstRecipe.SelectedValue);
DataTable ingredientTable = new DataTable();
adapter.Fill(ingredientTable);
//Dit displayt de listbox.
lstIngredient.DisplayMember = "Name";
lstIngredient.ValueMember = "id";
lstIngredient.DataSource = ingredientTable;
}
}
答案 0 :(得分:0)
在关闭现有数据库之前,您正在打开与数据库的新连接。
代码中发生的情况是,当执行进入方法VoegReceptenToe
时,它会打开与数据库的新连接以插入一些数据。但是,在关闭该连接之前,您正在调用PopulateRecipes
方法,该方法将打开与数据库的新连接。
您需要做的是拆分插入和查询操作,您可以通过在VoegReceptenToe
语句之后移动方法using
来执行此操作:
private void VoegReceptenToe()
{
string query = "INSERT INTO Recipe VALUES (@RecipeName, 30, 'goed mixen')";
using (connection = new SqlConnection(connectionstring))
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
command.Parameters.AddWithValue("@RecipeName", txtRecipeName.Text);
command.ExecuteScalar();
}
PopulateRecipes();
}
答案 1 :(得分:0)
只要你确保Recipe&成分名称在其表格中是唯一的(可能使用独特的索引)&你确定了RecipeName&表格中存在IngredientName(例如,只从列表框中选择),然后以下查询可以执行您想要的操作:
INSERT INTO Recipe_Ingredient (RecipeID, IngredientID)
VALUES (
SELECT ID FROM Recipe Where Name = @RecipeName,
SELECT ID FROM Ingredient Where Name = @IngredientName)
这会在Recipe_Ingredient表中插入一个条目,该表由RecipeName&的ID组成。只要每个都有一个条目,就可以使用IngredientName。
您需要为RecipeName和amp;添加参数。您的命令的IngredientName并运行ExecuteNonQuery方法,因为INSERT不返回值。
与添加新的RecipeName类似,应该使用ExecuteNonQuery方法来运行此查询:
INSERT INTO Recipe (Name, PrepTime, Instructions) VALUES (@RecipeName, 30, 'goed mixen')
和新的成分
INSERT INTO Ingredient (Name) VALUES (@Ingredient)
另请注意RePierre重新排序您的代码,以确保连接不会过早关闭。