SQL CLR을 사용하여 많은 수의 저장 프로 시저를 설정하고 있습니다. 현재 디버깅 모드입니다.SQL Server CLR - SqlDataRecord.SetValue InvalidCastException
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)
으로 데이터베이스에 저장된 값이지만, 실제로 나는 SqlMetaData
컨테이너 SqlDbType.BigInt
을 선택하는 이유 여섯 자리 숫자입니다. 레코드의 "CASEID"(record.SetValue(1, caseId)
)를 설정 한 행에서 나는 계속 InvalidCastException
을 얻습니다.
저는이 전체 SQL CLR에 익숙하지만, System.Int32
은 SqlDbType.BigInt
과 호환되어야한다고 생각합니다. 내가 뭘 놓치고 있니?
MSDN 정보는 SqlDataRecord.SetValue는 ArgumentOutOfRangeException – volody
좋은 점을 던졌습니다 ... 다시 실행하기 내가 더 얻을 수 있는지 확인하기 위해 지금 보여줍니다 INT64 또는 sqlint64를이어야한다 기대 내 디버그 환경에서 정보 ... 감사합니다! – mbm29414
동일한 오류가 발생했습니다 : 오류 유형 :'System.InvalidCastException' 메시지 :'지정된 캐스트가 유효하지 않습니다. ' TargetSite :'{void SetValue (Int32, System.Object)}' 어떤 도움을 많이 주시면 감사하겠습니다! – mbm29414