SQLCLRを使用して大量のストアドプロシージャの設定に取り組んでいます。現在、デバッグモードです。
を使用してデータセットをクライアントに書き戻そうとしていますSqlPipe
。
これが私のコードです:
Dim metaData() As SqlMetaData = {New SqlMetaData("USERNAME", SqlDbType.VarChar, -1), _
New SqlMetaData("CASEID", SqlDbType.BigInt), _
New SqlMetaData("Reason", SqlDbType.VarChar, -1)}
Dim record As New SqlDataRecord(metaData)
Dim pipe As SqlPipe = SqlContext.Pipe
pipe.SendResultsStart(record)
Dim username = iDataRow.Item("USERNAME")
Dim caseId = Convert.ToInt32(identifier.CASEID)
Dim message = "Message"
record.SetValue(0, username)
record.SetValue(1, caseId)
record.SetValue(2, message)
pipe.SendResultsRow(record)
pipe.SendResultsEnd()
identifier.CASEID
はデータベースにとして格納されている値ですが、numeric(21)
実際には6桁の数字であるためSqlDbType.BigInt
、SqlMetaData
コンテナとして選択しました。レコードの「CASEID」(record.SetValue(1, caseId)
)を設定した行で、。を取得し続けInvalidCastException
ます。
私はこのSQLCLR全体に不慣れですが、System.Int32
と互換性があるはずだと私には思えSqlDbType.BigInt
ます。私は何が欠けていますか?