Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2014-12-07, 20:16
  #13
Medlem
Citat:
Ursprungligen postat av Proton
Så hur gick det nu då, fick du det att funka som det skulle och hur ser koden ut för det i sådana fall?


Som sagt min lösning är inte optimal för femöre, men det fungerar och det är mest för min egen skull så jag lär mig grunderna osv osv.

Har två lagrade procedurer, har inte lagt någon transaktionshantering med rollback än på dem.

Kod:
CREATE PROCEDURE [dbo].[AddRecipe]
	@paramRecipeName nvarchar(max),
	@paramRecipeDescription nvarchar(max),
	@paramRecipeTime decimal(18,0),
	@paramUserId int,
	@paramPicture image,
	@paramImagePath nvarchar(max)
AS

	SET NOCOUNT ON
	
	INSERT INTO Recipe(RecipeName, [Description], RecipeTime, UserId, Picture, ImagePath)
	VALUES(@paramRecipeName, @paramRecipeDescription, @paramRecipeTime, @paramUserId, @paramPicture, @paramImagePath)
	SELECT SCOPE_IDENTITY()


Använder mig av ADO.NET och sparar ID för det senaste värdet i en variabel:
object ID = cmd.ExecuteScalar();





Itererar sedan genom alla andra records jag vill lägga till som är kopplat till detta ID och exekverar den andra proceduren:

Kod:
CREATE PROCEDURE [dbo].[AddRecipeIngredient]
	@paramAmount decimal(18,0),
	@paramDescription nvarchar(max),
	@paramOrder int,
	@paramRecipeId int,
	@paramIngredientId int,
	@paramMeasureId int
AS
	INSERT INTO RecipeIngredient(Amount, [Description], [Order], RecipeId, IngredientId, MeasureId)
	VALUES (@paramAmount, @paramDescription, @paramOrder, @paramRecipeId, @paramIngredientId, @paramMeasureId)
RETURN 0


Nu tänkte jag lägga till en rollback och testa och se så det fungerar
Så nu får jag säkert smäll på fingrarna av Mr.Proton men det får man ta för att lära sig här i livet
Citera
2014-12-07, 22:11
  #14
Moderator
Protons avatar
Citat:
Ursprungligen postat av DatabasTomten
Som sagt min lösning är inte optimal för femöre, men det fungerar och det är mest för min egen skull så jag lär mig grunderna osv osv.

Har två lagrade procedurer, har inte lagt någon transaktionshantering med rollback än på dem.

Kod:
CREATE PROCEDURE [dbo].[AddRecipe]
	@paramRecipeName nvarchar(max),
	@paramRecipeDescription nvarchar(max),
	@paramRecipeTime decimal(18,0),
	@paramUserId int,
	@paramPicture image,
	@paramImagePath nvarchar(max)
AS

	SET NOCOUNT ON
	
	INSERT INTO Recipe(RecipeName, [Description], RecipeTime, UserId, Picture, ImagePath)
	VALUES(@paramRecipeName, @paramRecipeDescription, @paramRecipeTime, @paramUserId, @paramPicture, @paramImagePath)
	SELECT SCOPE_IDENTITY()


Använder mig av ADO.NET och sparar ID för det senaste värdet i en variabel:
object ID = cmd.ExecuteScalar();





Itererar sedan genom alla andra records jag vill lägga till som är kopplat till detta ID och exekverar den andra proceduren:

Kod:
CREATE PROCEDURE [dbo].[AddRecipeIngredient]
	@paramAmount decimal(18,0),
	@paramDescription nvarchar(max),
	@paramOrder int,
	@paramRecipeId int,
	@paramIngredientId int,
	@paramMeasureId int
AS
	INSERT INTO RecipeIngredient(Amount, [Description], [Order], RecipeId, IngredientId, MeasureId)
	VALUES (@paramAmount, @paramDescription, @paramOrder, @paramRecipeId, @paramIngredientId, @paramMeasureId)
RETURN 0


Nu tänkte jag lägga till en rollback och testa och se så det fungerar
Så nu får jag säkert smäll på fingrarna av Mr.Proton men det får man ta för att lära sig här i livet
Syftade ju såklart även på den omgivande C#-koden som du använder, kunde ju vara kul för andra att veta med?
Citera
2014-12-08, 09:22
  #15
Medlem
Citat:
Ursprungligen postat av Proton
Syftade ju såklart även på den omgivande C#-koden som du använder, kunde ju vara kul för andra att veta med?


Kod:
 try
                {

                    //Pekar koppling mot databas och öppnar dess väg.
                    conn = new SqlConnection();
                    conn.ConnectionString = ConfigurationManager.ConnectionStrings["RecipeContext"].ConnectionString;
                    conn.Open();

                    cmd = new SqlCommand("AddRecipe", conn);
                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.Add(new SqlParameter("@paramRecipeName", SqlDbType.NVarChar));
                    cmd.Parameters["@paramRecipeName"].Value = appModel.RecipeName;

                    cmd.Parameters.Add(new SqlParameter("@paramRecipeDescription", SqlDbType.NVarChar));
                    cmd.Parameters["@paramRecipeDescription"].Value = appModel.Description;

                    cmd.Parameters.Add(new SqlParameter("@paramRecipeTime", SqlDbType.Decimal));
                    cmd.Parameters["@paramRecipeTime"].Value = appModel.RecipeTime;

                    cmd.Parameters.Add(new SqlParameter("@paramUserId", SqlDbType.Int));
                    cmd.Parameters["@paramUserId"].Value = memberId;

                    cmd.Parameters.Add(new SqlParameter("@paramPicture", SqlDbType.Image));
                    cmd.Parameters["@paramPicture"].Value = appModel.Picture;

                    cmd.Parameters.Add(new SqlParameter("@paramImagePath", SqlDbType.NVarChar));
                    cmd.Parameters["@paramImagePath"].Value = appModel.ImagePath;

                    object ID = cmd.ExecuteScalar();


                    cmd = new SqlCommand("AddRecipeIngredient", conn);
                    cmd.CommandType = CommandType.StoredProcedure;

                    for (int i = 0; i < orderCounter; i++)
                    {
                        //Rensar de gamla parametervärden
                        cmd.Parameters.Clear();

                        cmd.Parameters.Add(new SqlParameter("@paramAmount", SqlDbType.Decimal));
                        cmd.Parameters["@paramAmount"].Value = appModel.Positions[i].Amount;

                        cmd.Parameters.Add(new SqlParameter("@paramDescription", SqlDbType.NVarChar));
                        cmd.Parameters["@paramDescription"].Value = appModel.Positions[i].Description;

                        cmd.Parameters.Add(new SqlParameter("@paramOrder", SqlDbType.Int));
                        cmd.Parameters["@paramOrder"].Value = appModel.Positions[i].Order;

                        cmd.Parameters.Add(new SqlParameter("@paramRecipeId", SqlDbType.Int));
                        cmd.Parameters["@paramRecipeId"].Value = ID;

                        cmd.Parameters.Add(new SqlParameter("@paramIngredientId", SqlDbType.Int));
                        cmd.Parameters["@paramIngredientId"].Value = appModel.Positions[i].IngredientId;

                        cmd.Parameters.Add(new SqlParameter("@paramMeasureId", SqlDbType.Int));
                        cmd.Parameters["@paramMeasureId"].Value = appModel.Positions[i].MeasureId;

                        cmd.ExecuteNonQuery();
                    }
                    
                }
                finally
                {
                    if (conn != null)
                    {
                        conn.Close();
                    }
                    if (rdr != null)
                    {
                        rdr.Close();
                    }
                }

Sådär Mr.Proton
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback