Sql 创建具有相同列名和列数据类型的数据表的新版本

Sql 创建具有相同列名和列数据类型的数据表的新版本,sql,vb.net,Sql,Vb.net,通过创建具有相同表且表具有相同列数据类型的相同列名的新.accdb,将表从.mdbs转换为.accdbs。使用OleDB和sql执行OnQuery。当我尝试将旧数据表列中的相同数据类型用于新列时,出现了问题。我带了满满一张桌子 adp.Fill(dTable) 下面的代码给了我关于除varchar之外的不同数据类型的列的问题 Public Sub ConvertTable(dTable As DataTable, tableName As String) Dim i As Int16

通过创建具有相同表且表具有相同列数据类型的相同列名的新.accdb,将表从.mdbs转换为.accdbs。使用OleDB和sql执行OnQuery。当我尝试将旧数据表列中的相同数据类型用于新列时,出现了问题。我带了满满一张桌子

adp.Fill(dTable)
下面的代码给了我关于除varchar之外的不同数据类型的列的问题

Public Sub ConvertTable(dTable As DataTable, tableName As String)

    Dim i As Int16 = 0
    Dim j As Int16 = 0
    strConnOutput = SharedRoutines.GetAccessACEConnectionString(aceDatabase)
    Using con2 As New OleDbConnection(strConnOutput)
        con2.Open()
        Dim sqlText As String = ""

        'Set up query to create a table with the same name as the'
        'spreadsheet.'
        sqlText = "CREATE TABLE [" & tableName & "] ("

        'Create all the columns that exist in the spreadsheet.'
        For Each col As DataColumn In dTable.Columns
            sqlText &= "[" & col.ColumnName & "] varchar, "
        Next
        'Clean up the end of the CREATE query.'
        sqlText = sqlText.Substring(0, sqlText.Length - 2) & ")"

        Using cmValid As New OleDbCommand(sqlText, con2)
            cmValid.ExecuteNonQuery()
        End Using

        'Set the INSERT SQL query for the data in the spreadsheet.'
        sqlText = "INSERT INTO [" & tableName & "] ("
        'Add all the columns to the INSERT query.'
        For Each col As DataColumn In dTable.Columns
            sqlText &= "[" & col.ColumnName & "], "
        Next
        'Clean up the end of the query string and prepare for the parameters.'
        sqlText = sqlText.Substring(0, sqlText.Length - 2) & ") VALUES ("
        'Add all the parameter placeholders to the INSERT query.'
        For Each col As DataColumn In dTable.Columns
            sqlText &= "?, "
        Next
        'Clean up the end of the INSERT query.'
        sqlText = sqlText.Substring(0, sqlText.Length - 2) & ")"

        Try
            'Loop through all the rows of data in the spreadsheet.'
            For Each rw As DataRow In dTable.Rows
                Using cmValid As New OleDbCommand(sqlText, con2)

                    'Add a parameter for each column.'
                    For Each col As DataColumn In dTable.Columns
                        cmValid.Parameters.Add(New OleDbParameter(col.ColumnName, rw(col.ColumnName)))
                    Next
                    'Send data to the new table.'
                    cmValid.ExecuteNonQuery()

                End Using
            Next
        Catch ex As Exception
            j += 1
            convertResponse &= tableName & " from " & aceDatabase & " was not completed."
            MessageBox.Show(tableName & " from " & aceDatabase & " was not completed. Message:" & ex.ToString)
        End Try



        dTable.Dispose()
        i += 1

        convertResponse &= "Table " & tableName & " was added to " & aceDatabase & ControlChars.CrLf
    End Using

End Sub
我更改了每个循环的

        For Each col As DataColumn In dTable.Columns
            sqlText &= "[" & col.ColumnName & "] " & col.DataType.ToString & ", "
        Next
但是现在executeNonQuery()抛出了一个语法错误。它不是col.dataType.Tostring吗? 带varchar的SqlText 创建表[BASIC_DESCRIPTION]([ColumnName]varchar,[Order]varchar) 和…比起来 创建表[BASIC_DESCRIPTION]([ColumnName]System.String,[Order]System.Int32) 我的问题是,我需要在sqlText中输入什么来确保创建的新列与旧表的类型相同?我找到的最接近的答案是这个。

我不是一个VB.NET的家伙,但我会尝试放弃.ToString并希望它是隐式的,或者让它成为.ToString(),因为它是一个方法调用。

从中创建了一个GetDBType函数并执行了ToString

      'Create all the columns that exist in the spreadsheet.'
        For Each col As DataColumn In dTable.Columns
            Dim colSQLType As SqlDbType = GetDBType(col.DataType)
            Dim colType As String = colSQLType.ToString

            sqlText &= "[" & col.ColumnName & "] " & colType & ", "
        Next

列名与数据类型完全不同。您可以/应该从与第二个表相关的任何数据库中读取模式;让NET来构建DTS,所以问题不在于varchar?我不知道,您实际上没有展示如何构建第二个表。我的水晶球说您只是在循环中添加了DataColumns,而没有指定创建text/string/varchar列的类型;因此,当列数据是其他数据时,会出现错误。它会很好地创建表。我只想确保列的数据类型相同。该错误与ExecuteOnQuery()中的sqlText一起引发。如果在表中放置了错误类型的列,则该表将不正常。