Excel と VisualBasic を接続してアプリケーションを作ろうとしていました。

そしたら、キャストが間違っているらしく・・・

どういうことかというと、

 OleDbDataReader で SELECT によって呼び出した値を取り出そうとしたのですが、  GetString でやったらダメだと怒られたわけですよ。

どういうことかというと、 Excel から呼び出す場合、データ型は、その列で一番多いものになります。

数値か文字列か。

レコードとして、

Name
-----
1
2
3
あ
い

と 5レコードがあった場合、半分以上(3レコード)が数値なので、GetDouble を使うと呼び出すことができます。 しかし、数値型でないレコードについては、Null が返ってきます。

文字列の場合はその逆で、GetString で取り出し可能になり、文字列型でないレコードが Null で返ってきます。

文字列と数値が同じ数だけあった場合は、・・・・・・どうなるんでしょうね。

文字列が入ることもあり、数値が入ることもある場合は、数値を文字列にして入れてください・・・とマイクロソフトが言っています。 (具体的な方法は知りません。)

ちなみに、Excel から取り出す場合のSQLは、

SELECT column1, column2, column3 FROM [Sheet1$]

となります。 FROM の記述方法に注意です。

カラム名は、先頭の行(セルでいうとA1,B1,C1,…)に入っている文字列になります。

Visual Basic.NET至高の技 SQL は、私も使っている本で、Excel との連携についても書かれています。その他 Oracle, MySQL, SQLServer 等も。