6

我需要通过 ADO.NET 创建一个临时表,在临时表和实际表之间的服务器上执行 aBulkCopy然后 a 。Merge

问题是使用纯 ADO.NET 创建临时表动态。架构应该与现有表相同,但该表是使用 ORM(NHibernate 或实体框架,我们还不确定)创建的。这也意味着架构将来可能会发生变化。

有没有办法使用普通的 ADO.NET 对象在数据库中创建表?比如一个DataTable包含原表的schema?

任何将我指向正确方向的信息表示赞赏。

4

2 回答 2

3

您可以使用 select into #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
于 2013-11-14T07:04:28.197 回答
2

我设法基于现有架构创建了一个临时表。

在我的网站上记录了解决方案

于 2013-04-25T08:37:03.617 回答