Massenkopie mit dynamisch erstellter temporärer Tabelle in ADO.NET

ado.net sqlbulkcopy

Frage

Ich benötige, um über ADO.NET eine temporäre Tabelle zu erstellen, eine BulkCopy und dann eine Merge auf dem Server zwischen der temporären und der tatsächlichen Tabelle durchzuführen.

Das Problem besteht darin, die temporäre Tabellendynamik mit reinem ADO.NET zu erstellen. Das Schema sollte mit der vorhandenen Tabelle identisch sein, aber diese Tabelle wird mit einem ORM (NHibernate oder Entity Framework, wir sind uns noch nicht sicher) erstellt. Dies bedeutet auch, dass sich das Schema in Zukunft ändern kann.

Gibt es eine Möglichkeit, eine Tabelle in der Datenbank mit einfachen ADO.NET-Objekten zu erstellen? Wie eine DataTable die das Schema der ursprünglichen Tabelle enthält?

Jede Information, die mich in die richtige Richtung weist, wird geschätzt.

Akzeptierte Antwort

Es ist mir gelungen, basierend auf einem bestehenden Schema eine temporäre Tabelle zu erstellen.

Blogged die Lösung auf meiner Website .


Beliebte Antwort

Sie können eine temporäre Tabelle erstellen, indem Sie in #somename auswählen.

connection_ = New SqlClient.SqlConnection(connection_string_)
connection_.Open()
If connection_.State = ConnectionState.Open Then

    command_.Connection = connection_
    command_.CommandType = CommandType.Text
    command_.CommandText = "select * into #some_table from some_table where some_id = 0"
    command_.ExecuteNonQuery()

    Dim line_index_ As Integer = 0
    Dim data_table_ As DataTable = New DataTable()
    Using parser_ As FileIO.TextFieldParser = New FileIO.TextFieldParser(path_)
        parser_.SetDelimiters(delimiter_)
        parser_.HasFieldsEnclosedInQuotes = False
        While Not parser_.EndOfData
            If line_index_ = 0 Then
                Dim headers_ As String() = parser_.ReadFields()
                For Each header_ In headers_
                    data_table_.Columns.Add(header_)
                Next
            Else
                Dim row_ As DataRow = data_table_.NewRow()
                row_.ItemArray = parser_.ReadFields()
                data_table_.Rows.Add(row_)
            End If
            line_index_ += 1
        End While
     End Using

     Using bulkCopy_ As SqlBulkCopy = New SqlBulkCopy(connection_)
           bulkCopy_.DestinationTableName = "#some_table"
           bulkCopy_.WriteToServer(data_table_)
     End Using

    ' proof
    command_.CommandText = "select * from #some_table"
    Dim reader_ As SqlDataReader = Nothing
    reader_ = command_.ExecuteReader
    line_index_ = 0
    While reader_.Read
        line_index_ += 0
    End While

 End If


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum