アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

下記のコードを実行すると
プロシージャまたは関数 spTest の引数が多すぎます

どこが悪いのかご教示お願いいたします。

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim i As Integer
Dim conn As New SqlConnection(connstr)
Dim cmd As New SqlCommand

conn.Open()
cmd.Connection = conn

cmd.CommandText = "Delete Table2"
cmd.CommandType = CommandType.Text
Debug.WriteLine(cmd.ExecuteNonQuery())


For i = 1 To 100
spTest(cmd, i)
Next

conn.Close()

End Sub


sub spTest(ByRef cmd As SqlCommand, ByVal intID As Integer)

Dim param As SqlParameter

With cmd

.CommandType = CommandType.StoredProcedure
.CommandText = "spTest"

param = .Parameters.Add(New _
SqlParameter("@ID", SqlDbType.Int))
param.Value = intID

.ExecuteNonQuery()
   ''''' ここで2回目からエラーが発生します

End With


End sub

A 回答 (2件)

Sub spTestの中で、cmdに毎回SqlParameterを足しているからでは。

1回目のAddでパラメータ1個、2回目のAddでパラメータ2個になり、2回目がエラーになるのでしょう。
    • good
    • 0
この回答へのお礼

xcrOSgS2wYさん、FENさん有難うございました。

>ソースだけだとよく分からないので、何をするプログラムなのかを明記した方がよろしいかと。

>Sub spTestの中で、cmdに毎回SqlParameterを足しているからでは。
>1回目のAddでパラメータ1個、2回目のAddでパラメータ2個になり、2回目>がエラーになるのでしょう。

実は、トランザクション処理がやりたかったのです。
これは、テストのストアドですが
テキストファイルを読み込み全ての行を処理し終えた時にCommit
不正なデータがあった時は、Rollbackの予定でした。

が、ストアドを繰り返すと失敗するので調べておりました。

おっしゃるとおり
.Parameters.Clear()
を挿入して解決しました。

有難うございました

お礼日時:2005/09/23 11:33

spTes内の「ExecuteNonQuery」が正常に完了していないのではないでしょうか?



後、ソースだけだとよく分からないので、何をするプログラムなのかを明記した方がよろしいかと。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています