1

SQL 2008 r2、vb.net 2010、Excel 2010、xls モードのファイルの使用

vb.net を介して Excel スプレッドシートをプログラムで sql 2010 にインポートしたいと考えています。スプレッドシートには 2 つのバージョンがあります。最初のものは、SQL インポート ウィザードでテーブルにインポートするために使用した元のものです (インポート ウィザードに表示されるシート名は Dictionary$ です)。

2 番目のバージョンは、SQL から Excel へのエクスポートです (手作業で多くの変更を行ったため)。

ファイル間で確認できる目に見える違いは次のとおりです。

  1. インポート ウィザードのシート名には、ディクショナリの後に $ がありません。
  2. スプレッドシートのすべてのセルには、' (セルの先頭にある単一引用符') があります。

今問題の問題に。プログラムでそれを行い、2 番目のバージョン (エクスポート済み) を使用すると、既存のすべての行が問題なくインポートされますが、スプレッドシートに行を追加すると、インポートではそれらの行が表示されません。

元のスプレッドシートをプログラムでインポートしようとすると、Excel ファイルでテーブル ディクショナリが見つからないため、行がインポートされません (ウィザードの最後に辞書の $ が表示されます)。

私が探しているソリューションは次のとおりです。

  • プログラムでSQLにインポートできるようにするために、Excelファイルで有効にする必要があるものはありますか?
  • そして、必要に応じて行を追加した場合に後で再インポートできるように、sql からエクスポートされたファイルに何ができますか?

コードは次のとおりです。次のコードはスプレッドシートの 2 番目のバージョンで機能し、SQL エクスポート ウィザードを使用して生成されたことに注意してください。また、スプレッドシートの下部に行を追加すると、それらの行はプログラムでインポートされません。

Private Shared Sub ImportDictionary()
        Dim curFile As String = "dictionary.xls"
        Dim fullPath As String = Path.GetFullPath(curFile)
        Dim Excelconnection = New OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; data source=" + fullPath + "; Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'")
        Dim myConnection As New SqlConnection(SQLdbString)
        Try
            myConnection.Open()
            Excelconnection.Open()
            Dim mySelectQuery As String = "SELECT * from dictionary"
            Dim myCommand2 As New OleDbCommand(mySelectQuery, Excelconnection)
            Dim myReader2 As OleDbDataReader
            myReader2 = myCommand2.ExecuteReader()
            While myReader2.Read()
                Dim myCommand As New SqlCommand
                Try
                    myCommand.Connection = myConnection
                    MyQueue.Enqueue(String.Format("{0} {1} {2} {3} {4}", myReader2.GetString(0), myReader2.GetString(1), myReader2.GetString(2), myReader2.GetString(3), myReader2.GetString(4)))
                    myCommand.Parameters.Add("@G0", SqlDbType.VarChar).Value = myReader2.GetString(0)
                    myCommand.Parameters.Add("@G1", SqlDbType.VarChar).Value = myReader2.GetString(1)
                    myCommand.Parameters.Add("@G2", SqlDbType.VarChar).Value = myReader2.GetString(2)
                    myCommand.Parameters.Add("@G3", SqlDbType.VarChar).Value = myReader2.GetString(3)
                    myCommand.Parameters.Add("@G4", SqlDbType.VarChar).Value = myReader2.GetString(4)
                    myCommand.CommandText = "INSERT INTO dictionary values(@G0,@G1,@G2,@G3,@G4)"
                    myCommand.ExecuteNonQuery()
                Catch e As Exception
                    Console.WriteLine(e.ToString())
                Finally
                    myCommand.Dispose()
                End Try
            End While
        Catch e As Exception
            Console.WriteLine(e.ToString())
        Finally
            myConnection.Dispose()
        End Try
        Excelconnection.Dispose()
    End Sub
4

0 に答える 0