DataGridにオラクルの内容を反映せさようとするとエラーになります。
やり方を間違えていますか?
Visual Studio .NET2003 VB, ORACLE 10gR1
1.ソース
Private cn As ADODB.Connection
Private rs As ADODB.Recordset
Private SqlCmd As ADODB.Command
cn = New ADODB.Connection
SqlCmd = New ADODB.Command
rs = New ADODB.Recordset
cn.Open("Provider=MSDAORA; Data Source=****;", "scott", "tiger")
SqlSt = "SELECT * FROM EMP"
SqlCmd.ActiveConnection = cn
SqlCmd.CommandText = SqlSt
rs = SqlCmd.Execute
DataGrid1.DataSource = rs <<エラー>>
2.エラー内容
'System.Exception' のハンドルされていない例外が system.windows.forms.dll で発生しました。
追加情報 : Complex DataBinding は IList または IListSource のどちらかをデータソースとして受け入れます。
※本当に(一分の隙もなく)まったくデータベースは分からないです。
なので、申し訳ないですが、見当違いの方向で書いているかもしれません。
その場合は無視してください(orz
ちょっと調べたところ、ADODBはCOMですよね?(本当かな…)
System.Data名前空間やSystem.Data.OracleClient名前空間を使わないのには何か理由があるのですか?
※予想で作ってみました。
デバッグしてません、自信ありません(orz
'---------------------------------------
'変数定義
private ora_cn As System.Data.OracleClient.OracleConnection
private ora_cmd As System.Data.OracleClient.OracleCommand
private ora_dtrd As System.Data.OracleClient.OracleDataReader
'OracleConnectionを開く
ora_cn=New System.Data.OracleClient.OracleConnection(〜不明〜)
'Commandを生成
ora_cmd=New System.Data.OracleClient.OracleCommand("SELECT * FROM HOGE", ora_cn)
'Connectionを実行し、OracleDataReaderを得る
ora_dtrd=ora_cmd.ExecuteReader()
'OracleDataReaderはIDataReaderを実装している
'なので、GetSchemaTable() As DataTable を使い、DataTableを得る
'DataTableはIListSourceインタフェイスを実装しているらしいので、それをDataSourceとする
'DataGrid1にilstsrcを設定
DataGrid1.DataSource=ora_dtrd.GetSchemeTable()
'色々とじる
〜不明〜
'---------------------------------------
…コレで動く…分けないか。
ありがとうございます。
サンプルにしたソースは、ACCESSとの連携プログラムだったのですが
一部を修正することで動作できると考えました。
ADOならば、プロバイダ名を変更することで、データベース製品を選択できることがメリットとして大きいです。
ORACLE好きですが、あまりORACLEに特化したものは作りたくないのです。
SQLServer、DB2等にも対応できるように汎用的なソースにしたいと思います。
殆ど同じようなソースで、EXCEL(VBA)からはシートにペーストができましたので
VBでは、シートの代わりに、DataGridにペーストのですが。。。
ちなみにORACLEへのアクセスは確認できていますので
照会できる形(DataGrid)で、結果を取りたいのです。
VB6.0ならそのソースでOKなのですが、VB.NETでは無理です。
VB6.0で作ってVB.NETへアップグレードすれば、
ラッパークラスを介してそういうコードで動かすことも可能は可能ですが、
これから取り組むなら、ADO.NETを習得されたほうがお薦めです。
「OleDbxxx」のクラスは、OLE DB プロバイダ経由のデータアクセスを行うので、
Oracle、SQLServer、DB2等にも対応できるように作ることが可能です。
http://vbdotnet.fc2web.com/vbnet/control/DataSet01.htm
まあ、もっともSQLServerに関しては、専用クラスがあって
http://www.microsoft.com/japan/msdn/thisweek/10lines/adonet_dataaccess.asp
のような感じで紹介されますね。
VBAからの乗換えでも、下記に目を通しておいたほうがいいかもしれません。
http://www.microsoft.com/japan/msdn/net/vbtransitionguide/
ツイート | ![]() |