레코드 중 하나에서 매개 변수로 레코드 집합을 사용하는 VB6 응용 프로그램이 있습니다. .NET 프로젝트에서 ADODB를 사용하여 레코드 세트를 만들고 VB6 프로젝트에 전달합니다. 나는 데이터베이스에 연결 한 후 분리하여 VS2010에서 레코드를 생성 할 때, 모두가 잘 그러나수동으로 만든 레코드 집합이 연결이 끊긴 레코드 집합처럼 작동하지 않습니다.
con.ConnectionString = "Provider=SQLOLEDB.1;Data Source=MyDB;Initial Catalog=IC;User ID=user;Password=pass"
rs.ActiveConnection = con
rs.Open("SELECT * FROM Table1")
rs.ActiveConnection = Nothing
, 나는 그물의 DataTable에서 데이터를 복사하여 레코드를 만들 때 : rsRecordSet = 새 ADODB를. 레코드
For Each dtDataColumn As DataColumn In dtDataTable.Columns
Select Case dtDataColumn.DataType.UnderlyingSystemType.ToString
Case "System.Boolean" : dteRecordSetDataType = DataTypeEnum.adBoolean
Case "System.Byte" : dteRecordSetDataType = DataTypeEnum.adUnsignedTinyInt
Case "System.Char" : dteRecordSetDataType = DataTypeEnum.adChar
Case "System.DateTime" : dteRecordSetDataType = DataTypeEnum.adDate
Case "System.Double" : dteRecordSetDataType = DataTypeEnum.adDouble
Case "System.Int16" : dteRecordSetDataType = DataTypeEnum.adSmallInt
Case "System.Int32" : dteRecordSetDataType = DataTypeEnum.adInteger
Case "System.Int64" : dteRecordSetDataType = DataTypeEnum.adBigInt
Case "System.SByte" : dteRecordSetDataType = DataTypeEnum.adTinyInt
Case "System.Single" : dteRecordSetDataType = DataTypeEnum.adSingle
Case "System.UInt16" : dteRecordSetDataType = DataTypeEnum.adUnsignedSmallInt
Case "System.UInt32" : dteRecordSetDataType = DataTypeEnum.adUnsignedInt
Case "System.UInt64" : dteRecordSetDataType = DataTypeEnum.adUnsignedBigInt
Case "System.Guid" : dteRecordSetDataType = DataTypeEnum.adGUID
Case "System.String" : dteRecordSetDataType = DataTypeEnum.adVarChar
Case Else : dteRecordSetDataType = DataTypeEnum.adVarChar
End Select
If dtDataColumn.AllowDBNull Then
faeRecordSetAttribute = FieldAttributeEnum.adFldIsNullable
Else
faeRecordSetAttribute = FieldAttributeEnum.adFldUnspecified
End If
rsRecordSet.Fields.Append(dtDataColumn.ColumnName, dteRecordSetDataType, dtDataColumn.MaxLength, faeRecordSetAttribute)
Next
rsRecordSet.CursorLocation = CursorLocationEnum.adUseClient
rsRecordSet.CursorType = CursorTypeEnum.adOpenDynamic
rsRecordSet.LockType = LockTypeEnum.adLockOptimistic
rsRecordSet.ActiveConnection = Nothing
rsRecordSet.Open()
For Each dtDataRow As DataRow In dtDataTable.Rows
rsRecordSet.AddNew()
For Each rsField As ADODB.Field In rsRecordSet.Fields
Select Case rsField.Type
Case DataTypeEnum.adBoolean : rsField.Value = Convert.ToBoolean(dtDataRow.Item(rsField.Name))
Case DataTypeEnum.adGUID : rsField.Value = "{" & dtDataRow.Item(rsField.Name).ToString & "}"
Case Else : rsField.Value = dtDataRow.Item(rsField.Name)
End Select
Next
Next
Return rsRecordSet
... 내 VB6 프로젝트는 바로 이러한 "작업이 컨텍스트에서 허용되지 않습니다"와 "호출 수신자 (서버 [없는 서버 응용 프로그램]) 사용할 수 없습니다 사라과 같은 오류가 그것을 거부, 모든 연결이 유효하지 않습니다. (HRESULT 예외 : 0x80010007 (RPC_E_SERVER_DIED)) "호출이 실행되었을 수 있습니다. VB6 프로젝트에서 레코드 세트가 거부되고있는 곳을보기 위해 불가능한 시간을 두 번에 걸쳐 디버깅하는 데 어려움을 겪고 있지만 VB6 함수로 넘어 가기 전에 상황이 발생했다고 생각합니다.
다른 사람이 두 레코드의 차이점을 설명 할 수 있기를 바랍니다. 한 번에 데이터베이스 소스에 연결되었음을 나타내는 정보가 하나의 레코드 세트에 있습니까? 내 기존 데이터 테이블에서 "선택"할 수있는 방법이있어서 레코드 세트가 어딘가에서 가져온 것이라고 생각할 수 있습니까?
미리 감사드립니다.