- PR -

ストアドからの返り値がうけとれない

1
投稿者投稿内容
マスオカ
会議室デビュー日: 2006/04/13
投稿数: 3
投稿日時: 2006-04-13 15:49
VB.NETとSQLSERVER2000で開発しています。
ストアドの中で対象データを処理して、処理対象をワークテーブルに書き出して
その書き出した結果をVB側で受け取ってファイルに出力しようとしています。
ところが、結果を受け取って出力しようとすると
処理結果が複数件あるはずなのに一件だけしかファイルに出力されません。
SQLクエリアナライザーからストアド単体でデバッグ実行させると
ちゃんと想定していたデータがすべて返り値になっているのですが、

sqlCommand = New SqlCommand("DP0516_UpdateKarishime", sqlConn)
'------ ストアド実行 ------
sqlCommand.Transaction = sqlTran
sqlCommand.ExecuteNonQuery()
sqlReader = sqlCommand.ExecuteReader
sqlCommand.CommandType = CommandType.StoredProcedure
sqlCommand.CommandTimeout = shtTimeOut

sqlCommand.Parameters.Clear()
sqlCommand.Parameters.Add("@chrKeijyoTuki", System.Data.SqlDbType.Char, 7)
パラメータを設定しています

If Me.chkShiireShime.Checked = True Then
'----- 仮締処理チェックリストを出力する -------
If sqlReader.HasRows Then
strFileName = "仮締め処理_" & Me.pnlUserID.Text & "_" & Format(clsPrjUtil.GetSysYMDHMS(), "yyMMddHHmmss") & ".xls"
FileOpen(intfileNo, strOutDir & strFileName, OpenMode.Output)
strWriteLine = "支払番号"
WriteLine(intfileNo, strWriteLine)

Do While (sqlReader.Read)
strWriteLine = CStr(sqlReader(0))
WriteLine(intfileNo, strWriteLine)
Loop
FileClose(intfileNo)
sqlReader.Close()

'----- 支払の見直しの必要なデータがありました -------
clsMsg.outMsg(216)
End If
End If




--------- 一時テーブル -----------
DECLARE @tblInsertSIHARAI TABLE(
cozSHIHARAI_NO CHAR(10)
)



INSERT INTO @tblInsertSIHARAI(cozSHIHARAI_NO)VALUES(@I_SHIHARAI_NO)



/* 支払い番号の一覧を返す */
SELECT * FROM @tblInsertSIHARAI

RETURN(0)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-13 15:52
Do While (sqlReader.Read) は 1 度しか通過しないということでしょうか?
ファイルに書き込む際の問題か、それ以前かを切り分ける必要があります。
ブレークポイントを設定してご確認ください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-13 15:56
しっかり見てみたら...

引用:

マスオカさんの書き込み (2006-04-13 15:49) より:

sqlCommand.Transaction = sqlTran
sqlCommand.ExecuteNonQuery()
sqlReader = sqlCommand.ExecuteReader


ここって何をしてるんですか?
ExecuteNonQuery で "実行" した後に、もう 1 回 ExecuteReader で "実行" していますね。

引用:

sqlCommand.CommandType = CommandType.StoredProcedure


実行し終えた Command に StoredProcedure タイプを設定?????

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
マスオカ
会議室デビュー日: 2006/04/13
投稿数: 3
投稿日時: 2006-04-13 16:29
ご指摘ありがとうございます。
sqlCommand.ExecuteNonQuery() の行を消したらうまく動きました
よく意味がわからないで人の作ったサンプルを元にしてやっているので
このような基本的なミスが理解できず恥ずかしい限りです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-13 16:58
引用:

マスオカさんの書き込み (2006-04-13 16:29) より:

sqlCommand.ExecuteNonQuery() の行を消したらうまく動きました
よく意味がわからないで人の作ったサンプルを元にしてやっているので
このような基本的なミスが理解できず恥ずかしい限りです。


できれば意味を理解して利用した方が良いです。
まず、わからないメソッドはリファレンスを読むことからです。
(覚えるにこしたことはないですが、無理に覚える必要はないです)

  SqlCommand.ExecuteNonQuery メソッド

もしかしたら、事前に防ぐことができたのかもしれません。
大変でしょうけど、頑張ってください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

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