- PR -

ストアドプロシージャについて

1
投稿者投稿内容
lowleveler
会議室デビュー日: 2006/01/09
投稿数: 4
投稿日時: 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をつけなければ通ったり、つけなければ必要だというエラーメッセージになったり)。

上記以外の方法で、パラメを取得できる方法をご存知のかたがいたら、よろしくお願いします。



Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2006-01-10 09:37
SqlConnectionを利用しても同じ不具合が発生するでしょうか。
び〜る
会議室デビュー日: 2005/11/29
投稿数: 12
投稿日時: 2006-01-10 10:14
まずはtry〜catchでExceptionを確認したほうがいいかもしれません。
DB接続を扱う場合はfinallyで確実に接続をcloseしたほうがいいですし。
lowleveler
会議室デビュー日: 2006/01/09
投稿数: 4
投稿日時: 2006-01-10 12:25
レスありがとうございます。
>SqlConnection
SqlConnectionには、GetOleDbSchemaTableメソッドがないため、この方法が使えないのです。

>try〜catchでExceptionを確認
記述しませんでしたが、使用しています。接続のCloseはきちんと確認しているのですが・・・。


SqlConnectionなどで、SPのパラメは取得できる方法があるでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-10 12:30
引用:

lowlevelerさんの書き込み (2006-01-10 12:25) より:

SqlConnectionには、GetOleDbSchemaTableメソッドがないため、この方法が使えないのです。


とりあえず、参考リンク。

  DataReader の GetSchemaTable メソッド

引用:

記述しませんでしたが、使用しています。


「記述しているのであれば、その例外の詳細を載せましょう」
と、仰りたかったのだと思います。

引用:

接続のCloseはきちんと確認しているのですが・・・。


「Finally に書くべきでしょう」
と、仰りたかったのだと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2006-01-10 17:29
そもそもストアドプロシージャーのパラメーターの一覧を取りたいのであればViewから取得するとかいう方法がスマートであると思うのですが。
lowleveler
会議室デビュー日: 2006/01/09
投稿数: 4
投稿日時: 2006-01-10 20:49
レスありがとうございます。
(じゃんぬめっとさんのサイトは時々参考にさせてもらっています。)

>参考リンク
CのコードをなんとかVBに変えて試したところ、テーブルの列情報はとれますが、ストアドのパラメを取得する方法がわかりませんでした・・・。


>Viewから取得する
ヘルプを呼んでいたら、ViewはDataTableを基にして使うもののように見受けられました。メンバを見ている限り見当たらずで・・・。何か私が検討違いを起こしているのでしょうか?



lowleveler
会議室デビュー日: 2006/01/09
投稿数: 4
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)