DataGrid1でオラクルを表示するには?


オラクル好き。  2005-12-11 23:25:13  No: 128786

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 のどちらかをデータソースとして受け入れます。


ガッ  2005-12-11 23:44:08  No: 128787

※本当に(一分の隙もなく)まったくデータベースは分からないです。
  なので、申し訳ないですが、見当違いの方向で書いているかもしれません。
  その場合は無視してください(orz

ちょっと調べたところ、ADODBはCOMですよね?(本当かな…)
System.Data名前空間やSystem.Data.OracleClient名前空間を使わないのには何か理由があるのですか?


ガッ  2005-12-12 00:01:54  No: 128788

※予想で作ってみました。
  デバッグしてません、自信ありません(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()

'色々とじる
〜不明〜
'---------------------------------------

…コレで動く…分けないか。


オラクル好き。  2005-12-12 00:42:19  No: 128789

ありがとうございます。

サンプルにしたソースは、ACCESSとの連携プログラムだったのですが
一部を修正することで動作できると考えました。

ADOならば、プロバイダ名を変更することで、データベース製品を選択できることがメリットとして大きいです。

ORACLE好きですが、あまりORACLEに特化したものは作りたくないのです。
SQLServer、DB2等にも対応できるように汎用的なソースにしたいと思います。

殆ど同じようなソースで、EXCEL(VBA)からはシートにペーストができましたので
VBでは、シートの代わりに、DataGridにペーストのですが。。。

ちなみにORACLEへのアクセスは確認できていますので
照会できる形(DataGrid)で、結果を取りたいのです。


もげ  2005-12-12 23:44:06  No: 128790

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/


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加