0

VB.net には、実行時にテーブルが存在するかどうかを判断するプロシージャがあります。存在しない場合は、ローカルの FoxPro テーブルと同じスキーマで SQL Server にテーブルを作成します。これはできることでしょうか?

これが私がこれまでに持っているものです。現時点では、Visual Foxpro テーブルからスキーマを取得して表示するだけです。ここからどこへ行くべきかわからない。何か案は?

Private Sub dwprm01()
    Try
        Dim tableName As String = "dwprm01"
        Dim tableExists As Boolean = False
        Dim foxConn As New OleDbConnection("Provider=vfpoledb.1;Data Source=Z:\update_dwprm01\" & tableName & ".DBF;Collating Sequence=general;")

        sConn.Open()
        Dim restrictions(3) As String
        restrictions(2) = tableName
        Dim dbTbl As DataTable = sConn.GetSchema("Tables", restrictions)

        Console.WriteLine("Checking if " & tableName & " exists")

        If dbTbl.Rows.Count = 0 Then
            'Table does not exist
            tableExists = False

            Console.WriteLine(tableName & " does not exist")
            Console.WriteLine()
            Console.WriteLine("Creating " & tableName)

            Dim fSQL = "SELECT * FROM " & tableName
            Dim cmd As New OleDbCommand(fSQL, foxConn)

            foxConn.Open()

            Dim myReader As OleDbDataReader = cmd.ExecuteReader()
            Dim schema As DataTable = myReader.GetSchemaTable()

            For Each row As DataRow In schema.Rows
                For Each col As DataColumn In schema.Columns
                    Console.WriteLine(col.ColumnName & " = " & row(col).ToString())
                Next
            Next
            myReader.Close()
            foxConn.Close()
        Else
            'Table exists
            tableExists = True
            Console.WriteLine(tableName & " exists")
        End If

        dbTbl.Dispose()
        sConn.Close()
        sConn.Dispose()

    Catch ex As Exception
        Console.WriteLine(ex.ToString())
    End Try
End Sub
4

2 に答える 2

5

新しいテーブルが存在しないことを既に確認しているので、次のようなクエリを実行するだけです。

 SELECT TOP 0 * INTO NewTable FROM OriginalTable

これにより、元の構造と一致する行のない新しいテーブルが作成されます。

于 2013-09-18T15:53:32.993 に答える