Data inserting twice

Last post 05-04-2008 1:37 AM by moh1980. 11 replies.

Sort Posts:

  • Data inserting twice

    01-03-2007, 8:31 PM
    • Loading...
    • punkbd
    • Joined on 01-15-2006, 3:15 AM
    • Posts 6

    Is anyone aware of a bug or  am I doing something wrong or blind .... that I am getting two records inserted in db?

         <asp:DetailsView ID="DetailsViewInsert" runat="server" Height="50px" Width="100%" DataSourceID="ObjectDataSource1" DataKeyNames="MemoID" InsertRowStyle-BackColor="Azure" AutoGenerateRows="False" DefaultMode="Insert" OnItemCommand="DetailsViewInsert_ItemCommand">
            <Fields>            
            <asp:TemplateField HeaderText="Council Reference">
            <ItemTemplate>
                <asp:Literal ID="LtrCouncilRef" runat="server" Text='<%# Eval("CouncilRef")%>'></asp:Literal>
            </ItemTemplate>
            <InsertItemTemplate>
                <asp:TextBox ID="TxtCouncilRef" runat="server" Text='<%# Bind("CouncilRef")%>' BorderColor="Black" BorderStyle="Solid" BorderWidth="1"></asp:TextBox>
            </InsertItemTemplate>        
            </asp:TemplateField>
    
    
            <asp:TemplateField HeaderText="Com Reference">
            <ItemTemplate>
                <asp:Literal ID="LtrComRef" runat="server" Text='<%# Eval("ComRef")%>'></asp:Literal>
            </ItemTemplate>
            <InsertItemTemplate>
                <asp:TextBox ID="TxtComRef" runat="server" Text='<%# Bind("ComRef")%>' BorderColor="Black" BorderStyle="Solid" BorderWidth="1"></asp:TextBox>
            </InsertItemTemplate>        
            </asp:TemplateField>
            
            
                    <asp:TemplateField HeaderText="Sec Reference">
            <ItemTemplate>
                <asp:Literal ID="LtrSecRef" runat="server" Text='<%# Eval("SecRef")%>'></asp:Literal>
            </ItemTemplate>
            <InsertItemTemplate>
                <asp:TextBox ID="TxtSecRef" runat="server" Text='<%# Bind("SecRef")%>' BorderColor="Black" BorderStyle="Solid" BorderWidth="1"></asp:TextBox>
            </InsertItemTemplate>        
            </asp:TemplateField>
            
            
                    <asp:TemplateField HeaderText="PE Cons">
            <ItemTemplate>
                <asp:Literal ID="LtrPECons" runat="server" Text='<%# Eval("PECons")%>'></asp:Literal>
            </ItemTemplate>
            <InsertItemTemplate>
                <asp:TextBox ID="TxtPECons" runat="server" Text='<%# Bind("PECons")%>' BorderColor="Black" BorderStyle="Solid" BorderWidth="1"></asp:TextBox>
            </InsertItemTemplate>        
            </asp:TemplateField>
            
            
                    <asp:TemplateField HeaderText="Department name">
            <ItemTemplate>
                <asp:Literal ID="LtrDepartment" runat="server" Text='<%# Eval("DepartmentName")%>'></asp:Literal>
            </ItemTemplate>
            <InsertItemTemplate>
                <asp:ObjectDataSource ID="ObjectDataSourceDepartment" runat="server" TypeName="MemorandumBusinessLayer" SelectMethod="GetDepartmentName" CacheExpirationPolicy="Sliding" CacheDuration="20"></asp:ObjectDataSource>
                <asp:DropDownList ID="DropDownDept" runat="server" DataSourceID="ObjectDataSourceDepartment" DataTextField="DepartmentName" DataValueField="DeptID" BorderColor="Black" BorderStyle="Solid" BorderWidth="1">
                </asp:DropDownList>
    
            </InsertItemTemplate>        
            </asp:TemplateField>
            
            
                    <asp:TemplateField HeaderText="Title">
            <ItemTemplate>
                <asp:Literal ID="LtrMemoTitle" runat="server" Text='<%# Eval("MemoTitle")%>'></asp:Literal>
            </ItemTemplate>
            <InsertItemTemplate>
                <asp:TextBox ID="TxtMemoTitle" runat="server" Text='<%# Bind("MemoTitle")%>' BorderColor="Black" BorderStyle="Solid" BorderWidth="1" Width="400px"></asp:TextBox>
            </InsertItemTemplate>        
            </asp:TemplateField>
            
                            <asp:TemplateField HeaderText="Keywords">
            <ItemTemplate>
                <asp:Literal ID="LtrKeywords" runat="server" Text='<%# Eval("Keywords")%>'></asp:Literal>
            </ItemTemplate>
            <InsertItemTemplate>
                <asp:TextBox ID="TxtKeywords" runat="server" Text='<%# Bind("Keywords")%>' Height="40px" Rows="2" TextMode="MultiLine" BorderColor="Black" BorderStyle="Solid" BorderWidth="1" Width="400px"></asp:TextBox>
            </InsertItemTemplate>        
            </asp:TemplateField>                                
            
    
                <asp:ButtonField ButtonType="Button" Text="Insert" CausesValidation="true" CommandName="Insert" />
    
            
            </Fields>
            <InsertRowStyle BackColor="Azure" Height="20px" />
            <RowStyle Height="20px" />
            <FieldHeaderStyle CssClass="row1" />
    
        </asp:DetailsView>    
    
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server"  InsertMethod="InsertMemo" OldValuesParameterFormatString="original_{0}" SelectMethod="GetMemoForInsert" TypeName="MemoBusinessLayer" OnInserting="ObjectDataSource1_Inserting" OnInserted="ObjectDataSource1_Inserted"></asp:ObjectDataSource>
    
     

     

    ---- CS file/Code behind ---

     

     

    protected void Page_Load(object sender, EventArgs e)
    
    {
    
    }
    
    protected void DetailsViewInsert_ItemCommand(object sender, DetailsViewCommandEventArgs e)
    
    {
    
    if (e.CommandName.Equals("Insert"))
    
    {
    
    ObjectDataSource1.Insert();
    
    }
    
    }
    
    
    
    protected void ObjectDataSource1_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
    
    {
    
    string councilRef = ((TextBox)DetailsViewInsert.FindControl("TxtCouncilRef")).Text;
    
    string comRef = ((TextBox)DetailsViewInsert.FindControl("TxtComRef")).Text;
    
    string secRef = ((TextBox)DetailsViewInsert.FindControl("TxtSecRef")).Text;
    
    string PECons = ((TextBox)DetailsViewInsert.FindControl("TxtPECons")).Text;
    
    string dept = ((DropDownList)DetailsViewInsert.FindControl("DropDownDept")).SelectedItem.Value;
    
    string memoTitle = ((TextBox)DetailsViewInsert.FindControl("TxtMemoTitle")).Text;
    
    string keywords = ((TextBox)DetailsViewInsert.FindControl("TxtKeywords")).Text;
    
    
    e.InputParameters.Clear();
    e.InputParameters.Add("memoID", "0");
    
    e.InputParameters.Add("councilRef", councilRef);
    
    e.InputParameters.Add("comRef", comRef);
    
    e.InputParameters.Add("secRef", secRef);
    
    e.InputParameters.Add("peCons", PECons);
    
    e.InputParameters.Add("departmentID", dept);
    
    e.InputParameters.Add("documentTitle", memoTitle);
    
    e.InputParameters.Add("keywords", keywords); 
    
    
    e.InputParameters.Add("lastRecordID", -1);
    }
    
    protected void ObjectDataSource1_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
    
    {
    
    if (e.Exception != null)
    
    { 
    
    DivResult.Visible = true;
    
    }
    
    else
    
    {
    
    // TODO
    
    
    }
    
    }
    
    
    BLL/DAL
     
        public static int InsertMemo(
            int memoID,
            string councilRef,
            string comRef,
            string secRef,
            string peCons,
            int departmentID,
            string documentTitle,
            string keywords,
            out int lastRecordID
            )
        {
            int rowsAffected = 0;
            using (SqlConnection connection = ConnectionManager.GetMPSAdminConnection())
            {
                SqlCommand command = new SqlCommand("admin_InsertMemo", connection);
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.Add("@CouncilRef", SqlDbType.VarChar).Value = councilRef;
                command.Parameters.Add("@ComRef", SqlDbType.VarChar).Value = comRef;
                command.Parameters.Add("@SecRef", SqlDbType.VarChar).Value = secRef;
                command.Parameters.Add("@PECons", SqlDbType.VarChar).Value = peCons;
                command.Parameters.Add("@DeptID", SqlDbType.Int).Value = departmentID;
                command.Parameters.Add("@MemoTitle", SqlDbType.NVarChar).Value = documentTitle;
                command.Parameters.Add("@Keywords", SqlDbType.NVarChar).Value = keywords;
                command.Parameters.Add("@LastRecordID", SqlDbType.Int).Direction = ParameterDirection.Output;
                rowsAffected = command.ExecuteNonQuery();
                lastRecordID = Convert.ToInt32(command.Parameters["@LastRecordID"].Value.ToString());
    
            }
    
            return rowsAffected;
        }
    
     

      Stored Proc..

    CREATE PROCEDURE admin_InsertMemo(
    
    @CouncilRef varchar(20), 
    @ComRef varchar(20), 
    @SecRef varchar(20), 
    @PECons varchar(20), 
    @DeptID int, 
    @MemoTitle nvarchar(200), 
    @Keywords nvarchar(250), 
    @LastRecordID  int output
    )
    
    AS
    
    		INSERT INTO Memo
    		(
    		CouncilRef, ComRef, SecRef, PECons, DeptID, MemoTitle, Keywords
    		)
    
    		VALUES
    		(
    		@CouncilRef, @ComRef, @SecRef, @PECons, @DeptID, @MemoTitle, @Keywords
    
    		)
    
    		 SET @LastRecordID = SCOPE_IDENTITY()
    GO
     

     

  • Re: Data inserting twice

    01-03-2007, 9:20 PM
    • Loading...
    • punkbd
    • Joined on 01-15-2006, 3:15 AM
    • Posts 6

    Sorry forgot to mention...

    I have tried setting

    AutoEventWireup="false"

    for MasterPage and ASPX page and it makes no difference. 

     
  • Re: Data inserting twice

    01-04-2007, 2:51 AM
    • Loading...
    • yyy8347
    • Joined on 09-19-2006, 11:00 AM
    • Posts 703
    How about removing DetailsViewInsert_ItemCommand method?
    Sincerely,
    Young Fang
  • Re: Data inserting twice

    01-04-2007, 6:13 AM
    • Loading...
    • punkbd
    • Joined on 01-15-2006, 3:15 AM
    • Posts 6
    Where else would you fire the insert method (ObjectDataSource1.Insert())? Do you have any suggestions?
  • Re: Data inserting twice

    01-05-2007, 12:50 AM
    • Loading...
    • yyy8347
    • Joined on 09-19-2006, 11:00 AM
    • Posts 703

    Hi

    You could debug the bold line to see if it is fired twice:

    protected void DetailsViewInsert_ItemCommand(object sender, DetailsViewCommandEventArgs e)
    
    {
    
    if (e.CommandName.Equals("Insert"))
    
    {
    
    ObjectDataSource1.Insert();
    
    }
    
    }
    
     
    Sincerely,
    Young Fang
  • Re: Data inserting twice

    01-05-2007, 9:33 AM
    • Loading...
    • punkbd
    • Joined on 01-15-2006, 3:15 AM
    • Posts 6

    Hi yyy8347,

    I put When Hit breakpoint with debugging and interestingly I get this...

     

    DetailsViewInsert_ItemCommand() hit

    ObjectDataSource1.Insert() hit

    ObjectDataSource1.Inserting() hit

    ObjectDataSource1.Inserted() hit

    ObjectDataSource1.Inserting() hit

    ObjectDataSource1.Inserted() hit

    So Insert gets fired once and Inserting and Inserted twice.

    This is also confirmed by jetBrain dotTrace 2.0

     

    For experiment I added a Button and OnClick I call the ObjectDataSource.Insert() method.

    Button1_Click() hit

    ObjectDataSource1.Insert() hit

    ObjectDataSource1.Inserting() hit

    ObjectDataSource1.Inserted() hit

     

    Again I confirmed this by running jetBrain dotTrace 2.0

     

  • Re: Data inserting twice

    01-25-2007, 12:47 PM
    • Loading...
    • kokolin
    • Joined on 09-14-2006, 9:44 PM
    • Posts 2

    Hi Punkbd,

    I just read your posting on "Data Inserted Twice" and I have the same exact problem using ExecuteNonQuery. I am just wondering if you have figured out why and the workaround? I am so stressed out since I am in the wood trying to figure this out for days now... Please share with me. Thanks!!! :-)

    Best regards,

    Koko

    kokolin@yahoo.com

  • Re: Data inserting twice

    01-25-2007, 3:25 PM
    • Loading...
    • popsalsero
    • Joined on 01-25-2007, 8:17 PM
    • Posts 3

    I would say the problem will be solved if you remove the onItemCommand attribute. The duplicate insert is caused by you having fired the insert both from onItemCommand and from the button click already having insert as it's commandname, which causes the objectdatasource's insert method to execute.

     (I had a similar problem a few weeks ago)

    /Karl

  • Re: Data inserting twice

    12-08-2007, 9:11 PM
    • Loading...
    • howiem
    • Joined on 09-03-2006, 10:56 AM
    • Posts 67

     I was implementing this article:

    http://www.codeproject.com/KB/aspnet/ObjectDataSourceInDepth.aspx

    When I came accross the same problem.

    What was very interesting was that I converted the code to VB from C# and the exact same code implemented in VB gave me different behaviour than the C# code.

    INCLUDING the very annoying problem of having it insert data twice.

    I created  a pagelevel "trip" variable to prevent the invocation of the SQL insert statement - its a hack but I was exhausted trying to figure it out.

    ~ Howie

     

     

    Mark as Answer if my post solved your problem
  • Re: Data inserting twice

    03-06-2008, 3:36 PM
    • Loading...
    • bfairban
    • Joined on 03-06-2008, 8:35 PM
    • Posts 1

    Incase anyone is reading this who is using VB, the problem can be solved by simply removing the "handles" part of your sub defintion.

  • Re: Data inserting twice

    03-07-2008, 11:56 AM
    • Loading...
    • gavini
    • Joined on 10-25-2007, 8:05 PM
    • USA
    • Posts 149

     try removing the DetailsViewInsert_ItemCommand() method completely and add

    ObjectDataSource1.Insert(); 
    at the end of ObjectDataSource1_Inserting() method after gathering the input parameters; 
     If this doesnt work  try removing the InsertMethod="InsertMemo" from ObjectDataSource1 definition and
    directly make a call to InsertMemo at the end of ObjectDataSource1_Inserting() method passing the collected input parameters as variables to the InsertMemo method.
    Thanks
    Gavini
  • Re: Data inserting twice

    05-04-2008, 1:37 AM
    • Loading...
    • moh1980
    • Joined on 01-06-2008, 11:17 PM
    • Posts 5

    unbelievabel its working with me bfairban

    look what i did I have just commet 

    Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs)
    
    'Handles GridView1.RowDeleting  (look what i did I have just commet)
    
    Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs)
    
    'Handles GridView1.RowCommand  (look what i did I have just commet)
    
     
    Filed under:
Page 1 of 1 (12 items)
Microsoft Communities