Есть ли способ проверить наличие дубликатов при импорте таблицы Excel в таблицу MySQL с помощью vb.net - PullRequest
0 голосов
/ 29 сентября 2011

У меня есть файл Excel для загрузки в моем веб-приложении. Когда файл загружен, он должен быть открыт, а затем импортировать данные в таблицу MySQL. Он отлично работает в том, что он добавляет информацию просто отлично. Однако есть проблема в коде, который я не могу заставить правильно проверять дубликат. Отчасти это связано с тем, что в листе Excel, который будет использоваться, нет столбца, который я мог бы использовать в качестве уникального идентификатора. Несколько раз в листе Excel информация полностью совпадала по всей строке, только с разницей в один или два столбца ... Я думал, что мог бы сделать что-то вроде: Выберите * FROM table_name WHERE table_col_1 = переменная и table_col_2 = переменная 2 и т. Д. ...

Я думаю, что, делая это, я мог бы сравнить значения каждого столбца в строке со значением импорта, и если он будет таким же, он пропустит это ... Однако я не могу понять, как это сделать ... Может быть, я Я думаю об этом глубоко, и есть простой способ сделать это. Ниже приведена функция, которую я использую:

            Private Function PerFormUpdate(ByVal customer As String, ByVal bill_to As String, ByVal Contact As String, ByVal Company As String, ByVal firstName As String, ByVal mi As String, ByVal lastname As String, ByVal phone As String, ByVal altPhone As String, ByVal fax As String)
        Dim _db As New schoolEntities

        Dim command As MySqlCommand = _dbconn.CreateCommand()
        command.Parameters.AddWithValue("@Customer", customer)
        command.Parameters.AddWithValue("@Bill_to", bill_to)
        command.Parameters.AddWithValue("@Contact", Contact)
        command.Parameters.AddWithValue("@Company", Company)
        command.Parameters.AddWithValue("@First_Name", firstName)
        command.Parameters.AddWithValue("@M_I", mi)
        command.Parameters.AddWithValue("@Last_Name", lastname)
        command.Parameters.AddWithValue("@Phone", phone)
        command.Parameters.AddWithValue("@Alt_Phone", altPhone)
        command.Parameters.AddWithValue("@Fax", fax)

        command.CommandText = "SELECT * FROM quickbooks_imports WHERE Customer=@Customer, Bill_to=@Bill_to, Contact=@Contact, Company =@Company, First_Name=@First_Name, M_I=@M_I,  Last_Name=@Last_Name, Phone =@Phone, Alt_Phone=@Alt_Phone, Fax=@Fax"

        _dbconn.Open()

        Dim _mysqlReader As MySqlDataReader = command.ExecuteReader()
        _dbconn.Close()

        If Not _mysqlReader.HasRows Then
            Dim _UpdateItem As New quickbooks_imports
            Dim updateCommand As MySqlCommand = _dbconn.CreateCommand()

            _UpdateItem.Customer = customer
            _UpdateItem.Bill_to = bill_to
            _UpdateItem.Contact = Contact
            _UpdateItem.Company = Company
            _UpdateItem.First_Name = firstName
            _UpdateItem.M_I = mi
            _UpdateItem.Last_Name = lastname
            _UpdateItem.Phone = phone
            _UpdateItem.Alt_Phone = altPhone
            _UpdateItem.Fax = fax

            updateCommand.CommandText = "INSERT INTO quickbooks_imports (Customer,Bill_to,Contact,Company,First_Name,M_I,Last_Name,Phone,Alt_Phone,Fax) VALUES (@Customer, @Bill_to, @Contact, @Company, @First_Name, @M_I, @Last_Name, @Phone, @Alt_Phone, @Fax)"
            updateCommand.Parameters.AddWithValue("@Customer", _UpdateItem.Customer)
            updateCommand.Parameters.AddWithValue("@Bill_to", _UpdateItem.Bill_to)
            updateCommand.Parameters.AddWithValue("@Contact", _UpdateItem.Contact)
            updateCommand.Parameters.AddWithValue("@Company", _UpdateItem.Company)
            updateCommand.Parameters.AddWithValue("@First_Name", _UpdateItem.First_Name)
            updateCommand.Parameters.AddWithValue("@M_I", _UpdateItem.M_I)
            updateCommand.Parameters.AddWithValue("@Last_Name", _UpdateItem.Last_Name)
            updateCommand.Parameters.AddWithValue("@Phone", _UpdateItem.Phone)
            updateCommand.Parameters.AddWithValue("@Alt_Phone", _UpdateItem.Alt_Phone)
            updateCommand.Parameters.AddWithValue("@Fax", _UpdateItem.Fax)



            'updateCommand.CommandText = "INSERT INTO EXCEL (id,Customer,Bill_to,Contact,Company,First_Name,M_I,Last_Name,Phone,Alt_Phone,Fax) VALUES ('" & _UpdateItem.id & "','" & _UpdateItem.Customer & "','" & _UpdateItem.Bill_to & "','" & _UpdateItem.Contact & "','" & _UpdateItem.Company & "','" & _UpdateItem.First_Name & "','" & _UpdateItem.M_I & "','" & _UpdateItem.Last_Name & "','" & _UpdateItem.Phone & "','" & _UpdateItem.Alt_Phone & "','" & _UpdateItem.Fax & "') ON DUPLICATE KEY UPDATE Customer= '" & _UpdateItem.Customer & "' Bill_to= '" & _UpdateItem.Bill_to & "' Contact= '" & _UpdateItem.Contact & "' Company= '" & _UpdateItem.Company & "' First_Name= '" & _UpdateItem.First_Name & "' M_I= '" & _UpdateItem.M_I & "' Last_Name= '" & _UpdateItem.Last_Name & "' Phone= '" & _UpdateItem.Phone & "' Alt_Phone= '" & _UpdateItem.Alt_Phone & "' Fax= '" & _UpdateItem.Fax & "'"
            'updateCommand.CommandText = "INSERT INTO quickbooks_imports (Customer,Bill_to,Contact,Company,First_Name,M_I,Last_Name,Phone,Alt_Phone,Fax) VALUES ('" & _UpdateItem.Customer & "','" & _UpdateItem.Bill_to & "','" & _UpdateItem.Contact & "','" & _UpdateItem.Company & "','" & _UpdateItem.First_Name & "','" & _UpdateItem.M_I & "','" & _UpdateItem.Last_Name & "','" & _UpdateItem.Phone & "','" & _UpdateItem.Alt_Phone & "','" & _UpdateItem.Fax & "') "
            _dbconn.Open()
            Try
                updateCommand.ExecuteNonQuery()
            Catch ex As Exception
                Dim _error As String = Nothing
                MsgBox(ex.Message)
            End Try


            _db.SaveChanges()
        Else
            Dim _NewItem As New quickbooks_imports
            _NewItem.Customer = customer
            _NewItem.Bill_to = bill_to
            _NewItem.Contact = Contact
            _NewItem.Company = Company
            _NewItem.First_Name = firstName
            _NewItem.M_I = mi
            _NewItem.Last_Name = lastname
            _NewItem.Phone = phone
            _NewItem.Alt_Phone = altPhone
            _NewItem.Fax = fax
            _db.quickbooks_imports.AddObject(_NewItem)
            _db.SaveChanges()
        End If
        _dbconn.Close()
        Return View()
    End Function

Любая помощь будет принята с благодарностью ...

Ответы [ 2 ]

0 голосов
/ 29 сентября 2011

Попробуйте вставить данные из Excel в другую (может быть, во временную таблицу), затем скопируйте нужные данные из дополнительной таблицы в таблицу назначения, например -

INSERT INTO table1 SELECT DISTINCT * FROM temp_table;
0 голосов
/ 29 сентября 2011
declare @tempExist varchar(50);
set @tempExist=null;

select @tempExist=[ColumnName1] from [TableName]
where [ColumnName1]=@ColumnName1 or [ColumnName2]= @ColumnName2  and so on..

if(@tempExist!=NULL)
Begin
Insert into [TableName] (...)
End

Приведенный выше код предназначен для mssql ... и некоторый синтаксис может быть неправильным ... но это то, о чем я думаю ..

Но это может дать вам подсказку .. удачи !!

...