сравнить содержимое 2 видов сетки на одной странице aspx - PullRequest
1 голос
/ 23 декабря 2010

нам нужно сравнить содержимое двух идентичных видов сетки и извлечь строки, которые отличаются в третьем виде сетки, это выполнимо?

Я много пробовал, но безуспешно, пожалуйста, помогите мне.

в нашем офисе мы ежедневно берем резервную копию приложения ASP. Ms mse backend

в течение следующих нескольких дней нам нужно оценить изменения, внесенные в записи в таблицах базы данных

в конце каждого дня я хочу сравнить 2 базы данных доступа: первая база данных - резервная копия вчерашнего дня, а вторая база данных - резервная копия сегодняшнего дня

Я подумал о следующем алгоритме, пожалуйста, внимательно прочитайте и скажите мне, как приступить к сравнению таблиц данных / видов сетки

Мне нужно отобразить строки / ячейки, содержащие различия / обновления / удаленные данные

сравнение двух базовых баз данных ms access веб-приложения asp.net

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

моя команда и myseld выяснили это

Imports System.Data
Imports System.Data.OleDb
Partial Class MoKoTrack
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim myDB = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|databaseName.mdb;Persist Security Info=True")

    Session("CurrentDB") = myDB


    myDB.open()
    Dim mytables = myDB.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, New Object() {})

    Dim CurrentTable As String

    For i = 1 To mytables.Rows.Count
        CurrentTable = mytables.Rows(i - 1).Item(2).ToString
        If CurrentTable.Contains("Backup") Then CompareTable(CurrentTable, mytables.Rows(i - 1).Item(3).ToString)
    Next i

    '        Dim myGrid As New GridView
    'myGrid.DataSource = mytables
    'myGrid.DataBind()
    'Me.Form.Controls.Add(myGrid)
    'myDB.Close()
End Sub

Sub CompareTable(ByVal BackupTableName As String, ByVal myPrimKey As String)

    Dim OriginalTable As New DataTable
    Dim BackupTable As New DataTable
    Dim ModificationsTable As New DataTable
    Dim AddedTable As New DataTable
    Dim DeletedTable As New DataTable

    Dim myDB = Session("CurrentDB")
    Dim FinalSQLString = "SELECT * FROM [" + BackupTableName + "]"
    Dim myDBCommand = New OleDbCommand(FinalSQLString, myDB)
    Dim myReader As IDataReader = myDBCommand.ExecuteReader()

    BackupTable.Load(myReader)

    Dim OriginalTableName = Left(BackupTableName, Len(BackupTableName) - 6)
    Dim FinalSQLString2 = "SELECT * FROM [" + OriginalTableName + "]"
    Dim myDBCommand2 = New OleDbCommand(FinalSQLString2, myDB)
    'Generate a temporary reader to get the number of cases
    Dim myReader2 As IDataReader = myDBCommand2.ExecuteReader()
    OriginalTable.Load(myReader2)

    Dim myPrimColumn(0) As DataColumn
    myPrimColumn(0) = OriginalTable.Columns(myPrimKey)
    OriginalTable.PrimaryKey = myPrimColumn
    Dim myPrimColumn2(0) As DataColumn
    myPrimColumn2(0) = BackupTable.Columns(myPrimKey)
    BackupTable.PrimaryKey = myPrimColumn2


    AddedTable = OriginalTable.Clone
    DeletedTable = OriginalTable.Clone
    ModificationsTable = OriginalTable.Clone
    ModificationsTable.PrimaryKey = Nothing

    Dim CurrentVal As String

    For i = 0 To OriginalTable.Rows.Count - 1
        CurrentVal = OriginalTable.Rows(i).Item(myPrimKey).ToString
        Dim foundRow As DataRow = BackupTable.Rows.Find(CurrentVal)
        If foundRow IsNot Nothing Then
            For t = 0 To OriginalTable.Columns.Count - 1
                If Not foundRow.Item(t).ToString = OriginalTable.Rows(i).Item(t).ToString Then
                    ModificationsTable.ImportRow(OriginalTable.Rows(i))
                    'ModificationsTable.Rows(ModificationsTable.Rows.Count - 1).Item(t) = ModificationsTable.Rows(ModificationsTable.Rows.Count - 1).Item(t) & "Modified"
                    ModificationsTable.ImportRow(foundRow)
                End If
            Next


        Else
            AddedTable.ImportRow(OriginalTable.Rows(i))
        End If

    Next

    For i = 0 To BackupTable.Rows.Count - 1
        CurrentVal = BackupTable.Rows(i).Item(myPrimKey).ToString
        Dim foundRow As DataRow = OriginalTable.Rows.Find(CurrentVal)
        If foundRow Is Nothing Then
            DeletedTable.ImportRow(OriginalTable.Rows(i))
        End If

    Next

    If AddedTable.Rows.Count > 0 Then
        Dim myLabel As New Label
        myLabel.Text = "<br/> The following records were added to table " & OriginalTableName & "<br/> <br/>"
        Me.form1.Controls.Add(myLabel)
        Dim myGrid As New GridView
        myGrid.DataSource = AddedTable
        myGrid.DataBind()
        Me.form1.Controls.Add(myGrid)
    End If

    If ModificationsTable.Rows.Count > 0 Then
        Dim myLabel As New Label
        myLabel.Text = "<br/> The following records were modified in table " & OriginalTableName & "<br/> <br/>"
        Me.form1.Controls.Add(myLabel)
        Dim myGrid As New GridView
        myGrid.DataSource = ModificationsTable
        myGrid.DataBind()
        Me.form1.Controls.Add(myGrid)
    End If

    If DeletedTable.Rows.Count > 0 Then
        Dim myLabel As New Label
        myLabel.Text = "<br/> The following records were deleted from table " & OriginalTableName & "<br/> <br/>"
        Me.form1.Controls.Add(myLabel)
        Dim myGrid As New GridView
        myGrid.DataSource = DeletedTable
        myGrid.DataBind()
        Me.form1.Controls.Add(myGrid)
    End If


End Sub

End Class
0 голосов
/ 23 декабря 2010

Я обычно сравниваю это с помощью LINQ

Это даст вам старт

var SearchResults1 = from u in YourDB.YourUserTable1
                    orderby u.YourColumn
                    select u;

GridView1.DataSource = SearchResults1;
GridView1.DataBind();

var SearchResults2 = from u in YourDB.YourUserTable2
                        orderby u.YourColumn
                        select u;

GridView2.DataSource = SearchResults2;
GridView2.DataBind();

var SearchResults3 = from u1 in SearchResults2
                        where !(from u2 in SearchResults1
                                select u2.YourTablePrimaryKey).Contains(u1.YourTablePrimaryKey)
                        orderby u1.YourColumn
                        select u1;

GridView3.DataSource = SearchResults3;
GridView3.DataBind();

Вы можете дополнительно уточнить SearchResults 3, если хотите сравнить то, что в SearchResults1, но не в SearchResults2 и наоборот

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...