- - PR -
SQLCLR SqlDataRecord.SetValuesで結果セットが取得できない
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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の自習書くらいしかサンプルがないので難儀しています。 情報お持ちの方いらっしゃいませんかー。 | ||||
|
投稿日時: 2006-04-14 10:47
お疲れ様です。 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/ | ||||
|
投稿日時: 2006-04-14 15:21
あー
先に列情報をセットしとかないと駄目なんですか。 データセットのスキーマを抜いてこれるような仕組みがないとちょっと 魅力半減ですねー。 DataReaderそのまま返すならそもそもSQL-CLRじゃなくてもできますしね。 情報ありがとうございました〜。 | ||||
|
投稿日時: 2006-04-14 15:54
適した場面で使わなければ魅力は半減するでしょう。 SQL Server プログラミングを革新する SQL CLR とは? 個人的に SQL CLR を使うべき場面は、そこまで多くないと思っています。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1