- PR -

SQLCLR SqlDataRecord.SetValuesで結果セットが取得できない

1
投稿者投稿内容
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2006-04-13 11:00
VB2005,SQL2005のSQLCLRストアドなんですが

----- pipe.send
Dim pipe As SqlPipe = SqlContext.Pipe
Dim cmd As New SqlCommand()
cmd.CommandType = CommandType.Text
cmd.CommandText = "select 1,2,3,4 "
cmd.Connection = New SqlConnection("Context Connection=true")
cmd.Connection.Open()

'SQLの実行()
Dim reader As SqlDataReader = cmd.ExecuteReader()
'クライアントにデータ送信
pipe.Send(reader)
'終了処理
reader.Close()
cmd.Connection.Close()

で結果を取得できるのですが

----- pipe.SendResultRow
Dim kiyoadp As New SqlDataAdapter
Dim ds As New DataSet
Dim rc As SqlDataRecord
Dim dr As DataTableReader
kiyoadp.SelectCommand = New SqlCommand("select 1,2,3,4 ", New SqlConnection "Context Connection=true"))

kiyoadp.Fill(ds)

dr = ds.CreateDataReader
rc = New SqlDataRecord

pipe.SendResultsStart(rc)

Dim values(dr.FieldCount - 1) As Object

Do While dr.Read
dr.GetValues(values)
rc.SetValues(values)
pipe.SendResultsRow(rc)
Loop

pipe.SendResultsEnd()

では結果を取得できません。
エラーも帰ってきません。
ステップ実行してみるとrc.SetValues(values) でSqlDataRecordにセット
できてませんでしたが、dr.GetValues(values) でvalue配列に値が入って
いるのは確認できています。
MSの自習書くらいしかサンプルがないので難儀しています。
情報お持ちの方いらっしゃいませんかー。


TLC
大ベテラン
会議室デビュー日: 2005/05/31
投稿数: 152
お住まい・勤務地: 東京都
投稿日時: 2006-04-14 10:47
引用:

めだかさんの書き込み (2006-04-13 11:00) より:

dr = ds.CreateDataReader
rc = New SqlDataRecord

では結果を取得できません。
エラーも帰ってきません。
ステップ実行してみるとrc.SetValues(values) でSqlDataRecordにセット
できてませんでしたが、dr.GetValues(values) でvalue配列に値が入って
いるのは確認できています。


お疲れ様です。
TimberLandChapel です。

引数なしで New しただけの [SqlDataRecord] は

■列をひとつも持っていない状態

ですから,
[SetValues] しても値を設定することができません。
エラーも返ってこないですね。

たとえば,適当なスキーマを定義してあげれば結果を返すことができるようになります。
美しくないですが。。。

[code]-----
Dim metaData() As SqlMetaData = _
{New SqlMetaData("a", SqlDbType.Int), _
New SqlMetaData("b", SqlDbType.Int), _
New SqlMetaData("c", SqlDbType.Int), _
New SqlMetaData("d", SqlDbType.Int)}

rc = New SqlDataRecord(metaData)
[code]-----

データセットなどから効率よくスキーマをメタデータ配列として引っこ抜く方法を
もう少し研究する必要がありそうです。

取り急ぎ。

----------
TimberLandChapel
http://blogs.timberlandchapel.com/blogs/timberlandchapel/
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2006-04-14 15:21
あー
先に列情報をセットしとかないと駄目なんですか。
データセットのスキーマを抜いてこれるような仕組みがないとちょっと
魅力半減ですねー。
DataReaderそのまま返すならそもそもSQL-CLRじゃなくてもできますしね。

情報ありがとうございました〜。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-14 15:54
引用:

めだかさんの書き込み (2006-04-14 15:21) より:

データセットのスキーマを抜いてこれるような仕組みがないとちょっと魅力半減ですねー。
DataReaderそのまま返すならそもそもSQL-CLRじゃなくてもできますしね。


適した場面で使わなければ魅力は半減するでしょう。

  SQL Server プログラミングを革新する SQL CLR とは?

個人的に SQL CLR を使うべき場面は、そこまで多くないと思っています。

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

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