- - PR -
ストアドプロシージャについて
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-09 18:32
VB.NET2003から、SQLServer2000のストアドのパラメを取得したいと思っています。
----------------- 'OLEDBをOPEN Dim oleDbCn As New OleDb.OleDbConnection oleDbCn.ConnectionString = "Provider=SQLOLEDB.1; " & strCon' (←接続文字列) oleDbCn.Open() DataTb = New DataTable("a") DataTb = oleDbCn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Procedure_Parameters, _ New Object() {Nothing, Nothing, "ストアド名", Nothing}) oleDbCn.Close() oleDbCn = Nothing ----------------- 上記だと、データテーブルに「PARAMETER_NAME」フィールドができて取得できるのですが、SQLの認証によってかどうかよくわかりませんが、Openできるときとできないときが発生してしまい困っている状況です("Provider=SQLOLEDB.1; "のProviderをつけなければ通ったり、つけなければ必要だというエラーメッセージになったり)。 上記以外の方法で、パラメを取得できる方法をご存知のかたがいたら、よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-01-10 09:37
SqlConnectionを利用しても同じ不具合が発生するでしょうか。
| ||||||||||||
|
投稿日時: 2006-01-10 10:14
まずはtry〜catchでExceptionを確認したほうがいいかもしれません。
DB接続を扱う場合はfinallyで確実に接続をcloseしたほうがいいですし。 | ||||||||||||
|
投稿日時: 2006-01-10 12:25
レスありがとうございます。
>SqlConnection SqlConnectionには、GetOleDbSchemaTableメソッドがないため、この方法が使えないのです。 >try〜catchでExceptionを確認 記述しませんでしたが、使用しています。接続のCloseはきちんと確認しているのですが・・・。 SqlConnectionなどで、SPのパラメは取得できる方法があるでしょうか? | ||||||||||||
|
投稿日時: 2006-01-10 12:30
とりあえず、参考リンク。 DataReader の GetSchemaTable メソッド
「記述しているのであれば、その例外の詳細を載せましょう」 と、仰りたかったのだと思います。
「Finally に書くべきでしょう」 と、仰りたかったのだと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-01-10 17:29
そもそもストアドプロシージャーのパラメーターの一覧を取りたいのであればViewから取得するとかいう方法がスマートであると思うのですが。
| ||||||||||||
|
投稿日時: 2006-01-10 20:49
レスありがとうございます。
(じゃんぬめっとさんのサイトは時々参考にさせてもらっています。) >参考リンク CのコードをなんとかVBに変えて試したところ、テーブルの列情報はとれますが、ストアドのパラメを取得する方法がわかりませんでした・・・。 >Viewから取得する ヘルプを呼んでいたら、ViewはDataTableを基にして使うもののように見受けられました。メンバを見ている限り見当たらずで・・・。何か私が検討違いを起こしているのでしょうか? | ||||||||||||
|
投稿日時: 2006-01-11 16:32
レベルが低いもので、アドバイスを有効活用できず、色々試した結果、
SQLServerのコマンドにあるsp_helpを使うことにしました。 Dim cmd As New SqlClient.SqlCommand Dim objReader As SqlClient.SqlDataReader cmd.CommandText = "sp_help " & "SP名" cmd.Connection = "SQLServerのコネクション" objReader = cmd.ExecuteReader() 上記だと、SQLServer2000のクエリアナライザで実験したら結果セットが2つ 返ったので、objReader.NextResult()を使ってパラメ名を取得しました。 SQLServerのバージョンが異なるときにどうなるか不安ではありますが・・・・・・。 色々とアドバイスありがとうございました。 |
1