Copia di massa con tabella temporanea creata dinamica in ADO.NET

ado.net sqlbulkcopy

Domanda

Ho bisogno di creare tramite ADO.NET una tabella temporanea, eseguire un BulkCopy e quindi Merge sul server tra il temp e la tabella effettiva.

Il problema sta creando la tabella temporanea dinamica usando puro ADO.NET. Lo schema dovrebbe essere uguale alla tabella esistente, ma questa tabella viene creata utilizzando un ORM (NHibernate o Entity Framework, non siamo ancora sicuri). Ciò significa anche che lo schema può cambiare in futuro.

C'è un modo per creare una tabella nel database usando semplici oggetti ADO.NET? Come un DataTable contiene lo schema della tabella originale?

Qualsiasi informazione che mi indichi la giusta direzione è apprezzata.

Risposta accettata

Sono riuscito a creare una tabella temporanea basata su uno schema esistente.

Bloggato la soluzione sul mio sito .


Risposta popolare

Puoi creare una tabella temporanea utilizzando select in #somename.

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


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché