Hi Everyone,
I've been facing this issue since the last three days and I still can't seem to know where the issue is coming from. There are no syntax errors but i think there is something wrong with the logic because whenever I click the buton save, it doubles the data bein saved in the database. For example:

Excel file has 2 records in it:

1. Test
2. Test1

In database :
1.Test
2.Test
3.Test1
4.Test1

Here is the Save button code:
Code:
Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click
        Dim saveRemarks As String = String.Empty
        Dim ctr As Integer = 0
        Dim row As Integer = 0
        Try
            For i As Integer = 0 To gvExcel.Rows.Count - 1


                Dim tblMainID As Integer = Integer.Parse(gvExcel.Rows(i).Cells(0).Text.ToString().ToUpper.Trim())
                Dim MainCompanyName As String = gvExcel.Rows(i).Cells(1).Text.ToString().ToUpper.Trim()
                Dim tblMainSource As String = gvExcel.Rows(i).Cells(2).Text.ToString.ToUpper.Trim()
                Dim tblMainBusinessUnit As String = gvExcel.Rows(i).Cells(3).Text.ToString.ToUpper.Trim()
                Dim tblMainContact As String = gvExcel.Rows(i).Cells(4).Text.ToString.ToUpper.Trim()
                Dim tblMainPhoneNumber As String = gvExcel.Rows(i).Cells(5).Text.ToString.ToUpper.Trim()
                Dim tblMainEmail As String = gvExcel.Rows(i).Cells(6).Text.ToString.ToUpper.Trim()
                Dim tblMainUserID As String = gvExcel.Rows(i).Cells(7).Text.ToString.ToUpper.Trim()
                Dim tblMainWesite As String = gvExcel.Rows(i).Cells(8).Text.ToString.ToUpper.Trim()
                Dim tblMainAddress As String = gvExcel.Rows(i).Cells(9).Text.ToString.ToUpper.Trim()
                Dim tblMainZipCode As String = gvExcel.Rows(i).Cells(10).Text.ToString.ToUpper.Trim()
                Dim tblMainCountry As String = gvExcel.Rows(i).Cells(11).Text.ToString.ToUpper.Trim()
                Dim tblMainRegion As String = gvExcel.Rows(i).Cells(12).Text.ToString.ToUpper.Trim()
                Dim tblMainProjID As String = gvExcel.Rows(i).Cells(13).Text.ToString.ToUpper.Trim()
                Dim tblMainProjLeader As String = gvExcel.Rows(i).Cells(14).Text.ToString.ToUpper.Trim()
                Dim tblMainPrimarySOS As String = gvExcel.Rows(i).Cells(15).Text.ToString.ToUpper.Trim()
                Dim tblMainCommodityName As String = gvExcel.Rows(i).Cells(16).Text.ToString.ToUpper.Trim()
                Dim tblMainFY As String = gvExcel.Rows(i).Cells(17).Text.ToString.ToUpper.Trim()
                Dim tblMainQtr As String = gvExcel.Rows(i).Cells(18).Text.ToString.ToUpper.Trim()
                Dim tblMainESLiveTraining As String = gvExcel.Rows(i).Cells(19).Text.ToString.ToUpper.Trim()
                Dim tblMainCompliance As String = gvExcel.Rows(i).Cells(20).Text.ToString.ToUpper.Trim()
                Dim tblMainAnsweredDDSC As String = gvExcel.Rows(i).Cells(21).Text.ToString.ToUpper.Trim()
                
and so on...


                If updateTblMain(tblMainID, MainCompanyName, tblMainSource, tblMainBusinessUnit, tblMainContact, tblMainPhoneNumber, _
                                 tblMainEmail, tblMainUserID, _
                                  tblMainWesite, tblMainAddress, tblMainZipCode, tblMainCountry, tblMainRegion, _
                                     tblMainProjID, tblMainProjLeader, tblMainPrimarySOS, tblMainCommodityName, _
                     tblMainFY, tblMainQtr, tblMainESLiveTraining, tblMainCompliance, tblMainAnsweredDDSC, _
                         tblMainFreightTerm, tblMainPaymentTerm, tblMainParticipatedOnBidding, tblMainManufacturer, _
                          tblMainReason, tblMainNumLotsAwarded, tblMainCapabilityProcess, tblMainComments, "update", tblMainUsernameUpload, tblMainDateTimeUploaded) <> 0 Then
                    ctr += 1
                End If
                
            Next


        Catch ex As Exception
            lblWarning.Text += "Error encountered in row # " & row & ". Succeeding data not saved. Pls check data source"
        End Try

    End Sub
    Private Function updateTblMain(ByVal tblMainID As Integer, ByVal MainCompanyName As String, ByVal tblMainSource As String, _
ByVal tblMainBusinessUnit As String, ByVal tblMainContact As String, ByVal tblMainPhoneNumber As String, ByVal tblMainEmail As String, _
ByVal tblMainUserID As String, ByVal tblMainWesite As String, ByVal tblMainAddress As String, ByVal tblMainZipCode As String, _
ByVal tblMainCountry As String, ByVal tblMainRegion As String, ByVal tblMainProjID As String, ByVal tblMainProjLeader As String, _
ByVal tblMainPrimarySOS As String, ByVal tblMainCommodityName As String, ByVal tblMainFY As String, ByVal tblMainQtr As String, _
ByVal tblMainESLiveTraining As String, ByVal tblMainCompliance As String, ByVal tblMainAnsweredDDSC As String, ByVal tblMainFreightTerm As String, _
ByVal tblMainPaymentTerm As String, ByVal tblMainParticipatedOnBidding As String, ByVal tblMainManufacturer As String, _
ByVal tblMainReason As String, ByVal tblMainNumLotsAwarded As String, ByVal tblMainCapabilityProcess As String, ByVal tblMainComments As String, ByVal operation As String, _
ByVal tblMainUsernameUpload As String, ByVal tblMainDateTimeUploaded As Date) As Integer
        Dim dalc2 As New DALC
        Dim rec As Integer = dalc2.updateTblMain(tblMainID, MainCompanyName, tblMainSource, tblMainBusinessUnit, tblMainContact, tblMainPhoneNumber, _
        tblMainEmail, tblMainUserID, tblMainWesite, tblMainAddress, tblMainZipCode, tblMainCountry, tblMainRegion, tblMainProjID, _
        tblMainProjLeader, tblMainPrimarySOS, tblMainCommodityName, tblMainFY, tblMainQtr, tblMainESLiveTraining, tblMainCompliance, _
        tblMainAnsweredDDSC, tblMainFreightTerm, tblMainPaymentTerm, tblMainParticipatedOnBidding, tblMainManufacturer, _
        tblMainReason, tblMainNumLotsAwarded, tblMainCapabilityProcess, tblMainComments, operation, tblMainUsernameUpload, tblMainDateTimeUploaded)
        Return rec
    End Function

#Region "updateTblMain() : Updates Main Table"
    ''' <summary>
    ''' Updates Training Actual Table
    ''' </summary>
    Public Function updateTblMain(ByVal tblMainID As Integer, ByVal MainCompanyName As String, ByVal tblMainSource As String, _
ByVal tblMainBusinessUnit As String, ByVal tblMainContact As String, ByVal tblMainPhoneNumber As String, ByVal tblMainEmail As String, _
ByVal tblMainUserID As String, ByVal tblMainWesite As String, ByVal tblMainAddress As String, ByVal tblMainZipCode As String, _
ByVal tblMainCountry As String, ByVal tblMainRegion As String, ByVal tblMainProjID As String, ByVal tblMainProjLeader As String, _
ByVal tblMainPrimarySOS As String, ByVal tblMainCommodityName As String, ByVal tblMainFY As String, ByVal tblMainQtr As String, _
ByVal tblMainESLiveTraining As String, ByVal tblMainCompliance As String, ByVal tblMainAnsweredDDSC As String, ByVal tblMainFreightTerm As String, _
ByVal tblMainPaymentTerm As String, ByVal tblMainParticipatedOnBidding As String, ByVal tblMainManufacturer As String, _
ByVal tblMainReason As String, ByVal tblMainNumLotsAwarded As String, ByVal tblMainCapabilityProcess As String, ByVal tblMainComments As String, ByVal operation As String, ByVal tblMainUsernameUpload As String, _
ByVal tblMainDateTimeUploaded As Date) As Integer

        Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("dbStrConnect").ConnectionString)
        conn.Open()
        Try
            Dim cmd As New SqlCommand("updateTblMain", conn)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.AddWithValue("@tblMainID", tblMainID)
            cmd.Parameters.AddWithValue("@MainCompanyName", MainCompanyName)

            cmd.Parameters.AddWithValue("@tblMainSource", tblMainSource)
            cmd.Parameters.AddWithValue("@tblMainBusinessUnit", tblMainBusinessUnit)
            cmd.Parameters.AddWithValue("@tblMainContact", tblMainContact)
            cmd.Parameters.AddWithValue("@tblMainPhoneNumber", tblMainPhoneNumber)
            cmd.Parameters.AddWithValue("@tblMainEmail", tblMainEmail)
            cmd.Parameters.AddWithValue("@tblMainUserID", tblMainUserID)
            cmd.Parameters.AddWithValue("@tblMainWesite", tblMainWesite)
            cmd.Parameters.AddWithValue("@tblMainAddress", tblMainAddress)
            cmd.Parameters.AddWithValue("@tblMainZipCode", tblMainZipCode)
            cmd.Parameters.AddWithValue("@tblMainCountry", tblMainCountry)
            cmd.Parameters.AddWithValue("@tblMainRegion", tblMainRegion)
            cmd.Parameters.AddWithValue("@tblMainProjID", tblMainProjID)
            cmd.Parameters.AddWithValue("@tblMainProjLeader", tblMainProjLeader)
            cmd.Parameters.AddWithValue("@tblMainPrimarySOS", tblMainPrimarySOS)
            cmd.Parameters.AddWithValue("@tblMainCommodityName", tblMainCommodityName)
            cmd.Parameters.AddWithValue("@tblMainFY", tblMainFY)
            cmd.Parameters.AddWithValue("@tblMainQtr", tblMainQtr)
            cmd.Parameters.AddWithValue("@tblMainESLiveTraining", tblMainESLiveTraining)
            cmd.Parameters.AddWithValue("@tblMainCompliance", tblMainCompliance)
            cmd.Parameters.AddWithValue("@tblMainAnsweredDDSC", tblMainAnsweredDDSC)
            cmd.Parameters.AddWithValue("@tblMainFreightTerm", tblMainFreightTerm)
            cmd.Parameters.AddWithValue("@tblMainPaymentTerm", tblMainPaymentTerm)
            cmd.Parameters.AddWithValue("@tblMainParticipatedOnBidding", tblMainParticipatedOnBidding)
            cmd.Parameters.AddWithValue("@tblMainManufacturer", tblMainManufacturer)
            cmd.Parameters.AddWithValue("@tblMainReason", tblMainReason)
            cmd.Parameters.AddWithValue("@tblMainNumLotsAwarded", tblMainNumLotsAwarded)
            cmd.Parameters.AddWithValue("@tblMainCapabilityProcess", tblMainCapabilityProcess)
            cmd.Parameters.AddWithValue("@tblMainComments", tblMainComments)
            cmd.Parameters.AddWithValue("@operation", operation)
            cmd.Parameters.AddWithValue("@tblMainUsernameUpload", tblMainUsernameUpload)
            cmd.Parameters.AddWithValue("@tblMainDateTimeUploaded", tblMainDateTimeUploaded)

            Dim rec As Integer = cmd.ExecuteNonQuery()
            Return rec
        Catch ex As Exception
            Return 0
        Finally
            conn.Close()
        End Try
    End Function
#End Region
Here is the stored procedure :

Code:
USE [SupplierDB]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[updateTblMain]
	-- Add the parameters for the stored procedure here
	@tblMainID int, 
	@MainCompanyName nvarchar(50), 
	@tblMainSource nvarchar(20), 
	
	@tblMainBusinessUnit nvarchar(50),
	@tblMainContact nvarchar(50), 
	@tblMainPhoneNumber nvarchar(50),
	
	@tblMainEmail nvarchar(50), 
	@tblMainUserID nvarchar(50),
	@tblMainWesite nvarchar(50),
	
	@tblMainAddress varchar(4),
	@tblMainZipCode numeric(18, 0),
	@tblMainCountry nvarchar(50),
	
	
	@tblMainRegion nvarchar(50), 
	@tblMainProjID nvarchar(50),
	@tblMainProjLeader nvarchar(50),
	@tblMainPrimarySOS nvarchar(50),
	
	
	@tblMainCommodityName nvarchar(50),
	@tblMainFY numeric(18, 0), 
	@tblMainQtr nvarchar(5),
	
	@tblMainESLiveTraining datetime,
	@tblMainCompliance varchar(100), 
	@tblMainAnsweredDDSC nvarchar(50),
	
              and so on...
	
AS
BEGIN
DECLARE @exists bit
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

SET @exists = (SELECT 1 from tblMainForm where tblMainID = @tblMainID)
PRINT @exists


if (@operation = 'update')
	BEGIN
	if (@exists = 1 ) --perform EDIT/UPDATE
		begin
			UPDATE tblMainForm
			SET tblMainCompanyName = @MainCompanyName, 
			tblMainSource = @tblMainSource, 
			
			tblMainBusinessUnit= @tblMainBusinessUnit, 
			tblMainContact = @tblMainContact,
			tblMainPhoneNumber = @tblMainPhoneNumber, 
			tblMainEmail = @tblMainEmail, 
			tblMainUserID = @tblMainUserID, 
			tblMainWesite = @tblMainWesite, 
			tblMainAddress = @tblMainAddress,
			tblMainZipCode = @tblMainZipCode, 
			tblMainCountry = @tblMainCountry, 
			tblMainRegion = @tblMainRegion,
			tblMainProjID = @tblMainProjID, 
			tblMainProjLeader = @tblMainProjLeader, 
			tblMainPrimarySOS = @tblMainPrimarySOS,
			tblMainCommodityName = @tblMainCommodityName, 
			tblMainFY = @tblMainFY,
			
			tblMainQtr = @tblMainQtr, 
			tblMainESLiveTraining = @tblMainESLiveTraining, 
			tblMainCompliance = @tblMainCompliance,
			tblMainAnsweredDDSC = @tblMainAnsweredDDSC, 
			and so on..
			
		where tblMainID = @tblMainID;	
		end
	else --perform INSERT
		begin
			INSERT INTO tblMainForm
			(tblMainCompanyName,
			 tblMainSource, 
			 tblMainBusinessUnit, 
			 tblMainContact, 
			 tblMainPhoneNumber, 
			 tblMainEmail,
			 tblMainUserID, 
			 tblMainWesite,
			 tblMainAddress,
			 tblMainZipCode, 
			 tblMainCountry,
			 tblMainRegion, 
			 tblMainProjID,
			 tblMainProjLeader,
			 tblMainPrimarySOS, 
			 tblMainCommodityName,
			 tblMainFY,
			 tblMainQtr,
			 tblMainESLiveTraining,
		     tblMainCompliance,
			 tblMainAnsweredDDSC,
			 ... and so on) 
			 
			VALUES(
			@MainCompanyName,
			@tblMainSource, 
			@tblMainBusinessUnit, 
			@tblMainContact, 
			@tblMainPhoneNumber, 
			@tblMainEmail,
			@tblMainUserID, 
			@tblMainWesite,
			@tblMainAddress,
			@tblMainZipCode, 
			@tblMainCountry,
			@tblMainRegion, 
			@tblMainProjID,
			@tblMainProjLeader,
			@tblMainPrimarySOS, 
			@tblMainCommodityName,
			@tblMainFY,
			@tblMainQtr,
			@tblMainESLiveTraining,
		    	@tblMainCompliance,
			@tblMainAnsweredDDSC,
                                        ..... and so on) ;
		end			
	END
	
else if (@operation = 'delete')
	BEGIN
		DELETE FROM tblMainForm WHERE tblMainID = @tblMainID;
	END
END
I will greatly appreciate any help.

Thank you so much.