Copie en bloc avec table temporaire créée dynamique dans ADO.NET

ado.net sqlbulkcopy

Question

J'ai besoin de créer via ADO.NET une table temporaire, d'effectuer une BulkCopy puis une Merge sur le serveur entre la table temporaire et la table réelle.

Le problème est la création de la table temporaire dynamique en utilisant ADO.NET pur. Le schéma doit être identique à la table existante, mais cette table est créée à l'aide d'un ORM (NHibernate ou Entity Framework, nous ne sommes pas encore sûrs). Cela signifie également que le schéma peut changer à l'avenir.

Existe-t-il un moyen de créer une table dans la base de données à l'aide d'objets ADO.NET simples? Comme un DataTable contenant le schéma de la table d'origine?

Toute information me dirigeant dans la bonne direction est appréciée.

Réponse acceptée

J'ai réussi à créer une table temporaire basée sur un schéma existant.

Blogué la solution sur mon site .


Réponse populaire

Vous pouvez créer une table temporaire en utilisant select dans #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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi