SQL 2008 r2、vb.net 2010、Excel 2010、xls モードのファイルの使用
vb.net を介して Excel スプレッドシートをプログラムで sql 2010 にインポートしたいと考えています。スプレッドシートには 2 つのバージョンがあります。最初のものは、SQL インポート ウィザードでテーブルにインポートするために使用した元のものです (インポート ウィザードに表示されるシート名は Dictionary$ です)。
2 番目のバージョンは、SQL から Excel へのエクスポートです (手作業で多くの変更を行ったため)。
ファイル間で確認できる目に見える違いは次のとおりです。
- インポート ウィザードのシート名には、ディクショナリの後に $ がありません。
- スプレッドシートのすべてのセルには、' (セルの先頭にある単一引用符') があります。
今問題の問題に。プログラムでそれを行い、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