度々、申し訳ありません。
現在、VB2005で作成しています。
SQLサーバに接続して、
パラメータ付きストアドを実行したいのですが、
コードの記入の仕方がわかりません。
具体的にコードの記述方法をご教授下さい。
SQLとの接続は確認済みです。
大変申し訳ないのですが、宜しくお願いします。
引数、戻り値の型などが不明なので、以下のコードで感じをつかんで下さい。
ただ、このような情報は調べようによって見つけられますので・・・
Imports System.Data.SqlClient
上記、名前空間がインポートされている事
''引数2個で、カーソルを受け取る場合
Using con As New SqlConnection("接続文字列")
Using cmd As New SqlCommand
con.Open()
With cmd
.Connection = con
.CommandType = Data.CommandType.StoredProcedure
.CommandText = "HogeHogeProcedure"
.Parameters.Add(New SqlParameter("inValue1", Data.SqlDbType.VarChar)).Value = "A"
.Parameters.Add(New SqlParameter("inValue2", Data.SqlDbType.VarChar)).Value = "B"
End With
'以下でカーソルを取得する
'???? = cmd.ExecuteReader
End Using
End Using
''引数なしで、戻り値(数値)を受け取る場合
Using con As New SqlConnection("接続文字列")
Using cmd As New SqlCommand
con.Open()
With cmd
.Connection = con
.CommandType = Data.CommandType.StoredProcedure
.CommandText = "HogeHogeProcedure"
.Parameters.Add(New SqlParameter("ReturnValue", SqlDbType.Int, 4))
.Parameters("ReturnValue").Direction = ParameterDirection.ReturnValue
.ExecuteNonQuery()
End With
End Using
End Using
うなまな様
先日に引き続きありがとうございます。
調べ方の努力が足りずにご迷惑をお掛けして申し訳ありません。
ご記載頂いたサンプルコードで早速試してみたいと思います。
後からの報告で申し訳ないのですが、
このサンプルコードはSQLサーバ内にある作成済みの
ストアドプロシージャでも使用できるのでしょうか?
一度、試してみて再度ご報告致します。
先程、うなまな様よりご指導頂き挑戦したのですが、
希望通りになりませんでした。
当方の内容は、SQLサーバにテーブルとビューとストアドがあります。
SQLには接続してあります。
作成したフォームにコンボボックスを2つ作成しました。
コンボAにはSQLのストアドを設定してうまく起動しています。
今回実行したい事は、コンボAで選択した値と一致する内容のみを
コンボBで表示させたいのです。
例としまして、
コンボAで食べ物フィールドの「果物」を選択した場合、
コンボBではコンボボックスAで選択された
食べ物フィールドの「果物」と入力されている内容を表示すると
いった具合です。
コンボA・B共にテーブルには食べ物フィールドがあります。
Using con As New SqlClient.SqlConnection("接続文字列")
Using cmd As New SqlClient.SqlCommand
con.Open()
With cmd
.Connection = con
.CommandType = Data.CommandType.StoredProcedure
.CommandText = "q生活_食べ物"
.Parameters.Add(New SqlParameter("@種類", Data.SqlDbType.VarChar)).Value = コンボBComboBox
End With
End Using
End Using
上記の様にしたのですが、どこが間違っているのでしょうか?
今までは「access」+「SQLサーバ」で動かしていまして、
同じ内容のものをVB2005にて作成しています。
コードが全然違うので困っています。
宜しくお願いします。
まず、以下のようなストアドがあるとして
---------------------------------------------------------ストアドここから
ALTER PROCEDURE [dbo].[q生活_食べ物]
@種類 VARCHAR(6)
AS
BEGIN
SELECT * FROM 生活_食べ物テーブル WHERE 種類 = @種類
END
---------------------------------------------------------ストアドここまで
上記のストアドを利用したテストを行います。
---------------------------------------------------------ソースここから
Using con As New SqlConnection("接続文字列")
Using cmd As New SqlCommand
con.Open()
With cmd
.Connection = con
.CommandType = Data.CommandType.StoredProcedure
.CommandText = "q生活_食べ物"
.Parameters.Add(New SqlParameter("@種類", Data.SqlDbType.VarChar)).Value = "果物"
End With
'------------------------------------------------ここでストアドの戻り値を取得します
Dim dr As SqlDataReader = cmd.ExecuteReader
While dr.Read
Debug.WriteLine(dr("フィールド名"))
End While
'------------------------------------------------
End Using
End Using
---------------------------------------------------------ソースここまで
これでデバッグウインドウに指定したフィールドが列挙されれば、OKですね。
うなまな様
本当にありがとうございます。
ご提示頂いたコードを試しました所、
ウィンドウには正確に表示されましたが、
実際のフォームにあるコンボBには、
ウィンドウで出た内容が出てきませんでした。
>While dr.Read
> Debug.WriteLine(dr("フィールド名"))
>End While
この部分をコンボBで選択できる様なコードを書けば良いと思うのですが、
me.コンボB.text=(dr(食べ物))
と入力しても無反応でした。
申し訳ありませんが、宜しくお願いします。
コンボAでアイテムを追加されているようですが・・・
それはどのように行なっているのでしょうか?
うなまな様
コンボAにはSQLにあるストアドを
プロパティのDataSourceに設定しております。
(SelectedValue、DisplayMember、ValueMemberも設定しました。)
返答が間違っていますでしょうか?
コンボボックスにアイテムを追加すればいいので、
コンボB.Items.Clear
While dr.Read
コンボB.Items.Add(dr("フィールド名").ToString)
End While
こういうことかな?
DataSourceに指定する場合は、
Using con As New SqlConnection("接続文字列")
Using da As New SqlDataAdapter("q生活_食べ物", con)
With da.SelectCommand
.CommandType = Data.CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@種類", Data.SqlDbType.VarChar)).Value = "果物"
End With
Using ds As New DataSet
da.Fill(ds, "生活_食べ物")
Me.コンボB.DataSource = ds.Tables("生活_食べ物").DefaultView
Me.コンボB.DisplayMember = "食べ物名称"
Me.コンボB.ValueMember = "食べ物コード"
End Using
End Using
End Using
こんな感じですね。Itemsに追加するか、DataSourceに指定するかは、作成している
システムに良い方を選択してください。
うなまな様
心より感謝致します。
DataSourceの場合とItemの場合の両方試しましたが、
共に希望する内容になりました。
どちらを選択するかは、ご記載頂いた通り
システムに良い方を選択したいと思います。
また、不明点が出てきた際はお世話になると思いますが、
宜しくお願いします。
ありがとうございました。
ツイート | ![]() |