2014-10-21 2 views
3

SQL Server 에서 까지 Oracle의 데이터베이스 마이그레이션을 C# 응용 프로그램에서 수행합니다. 언급 된 응용 프로그램은 Entity Framework를 사용하여 데이터베이스에 액세스합니다.Entity Framework에서 out 매개 변수 (SYS_REFCURSOR)를 사용한 프로 시저

"ComplexType"을 반환하는 절차가 있습니다. Oracle에서 "ComplexType"을 인식하지 못하고 Web.config에서 출력 매개 변수의 매핑을 수행해야합니다.

<oracle.manageddataaccess.client> 
    <version number="*"> 
     <implicitRefCursor> 
     <storedProcedure schema="ALERTA_MPLUS" name="PR_CONSULTA_DADOS_ROBO"> 
      <refCursor name="CV_1"> 
      <bindInfo mode="Output" /> 
      <metadata columnOrdinal="0" columnName="Broker" baseColumnName="Broker" baseSchemaName="ALERTA_MPLUS" baseTableName="tt_Resultado_Final" nativeDataType="Varchar2" providerType="Varchar2" columnSize="50" /> 
      <metadata columnOrdinal="1" columnName="Companhia" baseColumnName="Companhia" baseSchemaName="ALERTA_MPLUS" baseTableName="tt_Resultado_Final" nativeDataType="Varchar2" providerType="Varchar2" columnSize="100" /> 
      <metadata columnOrdinal="2" columnName="Metrica" baseColumnName="Metrica" baseSchemaName="ALERTA_MPLUS" baseTableName="tt_Resultado_Final" nativeDataType="Varchar2" providerType="Varchar2" columnSize="50" /> 
      <metadata columnOrdinal="3" columnName="Q1" baseColumnName="Q1" baseSchemaName="ALERTA_MPLUS" baseTableName="tt_Resultado_Final" nativeDataType="NVarchar2" providerType="NVarchar2" columnSize="50" /> 
      <metadata columnOrdinal="4" columnName="Q2" baseColumnName="Q2" baseSchemaName="ALERTA_MPLUS" baseTableName="tt_Resultado_Final" nativeDataType="NVarchar2" providerType="NVarchar2" columnSize="50" /> 
      <metadata columnOrdinal="5" columnName="Q3" baseColumnName="Q3" baseSchemaName="ALERTA_MPLUS" baseTableName="tt_Resultado_Final" nativeDataType="NVarchar2" providerType="NVarchar2" columnSize="50" /> 
      <metadata columnOrdinal="6" columnName="Q4" baseColumnName="Q4" baseSchemaName="ALERTA_MPLUS" baseTableName="tt_Resultado_Final" nativeDataType="NVarchar2" providerType="NVarchar2" columnSize="50" /> 
      </refCursor> 
     </storedProcedure> 
     </implicitRefCursor> 
    </version> 
    </oracle.manageddataaccess.client> 

이 매핑은 개발 환경에서 완벽하게 작동하지만 승인에 대한 응용 프로그램을 통과 할 때 다음과 같은 오류 준 : 나는 몇 가지 솔루션을하지만 아무도 w를 시도했습니다

Error
을 성공적으로 :

  • ODAC가 서버에 설치되었습니다.
  • 검색은, 내가 매핑 그런 식으로 나타내는 Oracle 설명서를 발견

    <oracle.dataaccess.client> 
        <settings> 
        <add name="ALERTA_MPLUS.PR_CONSULTA_DADOS_ROBO.RefCursor.CV_1" value="implicitRefCursor bindinfo='mode=Output'" /> 
        <add name="ALERTA_MPLUS.PR_CONSULTA_DADOS_ROBO.RefCursorMetaData.CV_1.Column.0" value="implicitRefCursor metadata='ColumnName=Broker;BaseColumnName=Broker;BaseSchemaName=ALERTA_MPLUS;BaseTableName=tt_Resultado_Final;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'" /> 
        <add name="ALERTA_MPLUS.PR_CONSULTA_DADOS_ROBO.RefCursorMetaData.CV_1.Column.1" value="implicitRefCursor metadata='ColumnName=Companhia;BaseColumnName=Companhia;BaseSchemaName=ALERTA_MPLUS;BaseTableName=tt_Resultado_Final;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'" /> 
        <add name="ALERTA_MPLUS.PR_CONSULTA_DADOS_ROBO.RefCursorMetaData.CV_1.Column.2" value="implicitRefCursor metadata='ColumnName=Metrica;BaseColumnName=Metrica;BaseSchemaName=ALERTA_MPLUS;BaseTableName=tt_Resultado_Final;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'" /> 
        <add name="ALERTA_MPLUS.PR_CONSULTA_DADOS_ROBO.RefCursorMetaData.CV_1.Column.3" value="implicitRefCursor metadata='ColumnName=Q1;BaseColumnName=Q1;BaseSchemaName=ALERTA_MPLUS;BaseTableName=tt_Resultado_Final;NATIVEDATATYPE=NVarchar2;ProviderType=NVarchar2'" /> 
        <add name="ALERTA_MPLUS.PR_CONSULTA_DADOS_ROBO.RefCursorMetaData.CV_1.Column.4" value="implicitRefCursor metadata='ColumnName=Q2;BaseColumnName=Q2;BaseSchemaName=ALERTA_MPLUS;BaseTableName=tt_Resultado_Final;NATIVEDATATYPE=NVarchar2;ProviderType=NVarchar2'" /> 
        <add name="ALERTA_MPLUS.PR_CONSULTA_DADOS_ROBO.RefCursorMetaData.CV_1.Column.5" value="implicitRefCursor metadata='ColumnName=Q3;BaseColumnName=Q3;BaseSchemaName=ALERTA_MPLUS;BaseTableName=tt_Resultado_Final;NATIVEDATATYPE=NVarchar2;ProviderType=NVarchar2'" /> 
        <add name="ALERTA_MPLUS.PR_CONSULTA_DADOS_ROBO.RefCursorMetaData.CV_1.Column.6" value="implicitRefCursor metadata='ColumnName=Q4;BaseColumnName=Q4;BaseSchemaName=ALERTA_MPLUS;BaseTableName=tt_Resultado_Final;NATIVEDATATYPE=NVarchar2;ProviderType=NVarchar2'" /> 
        </settings> 
    </oracle.dataaccess.client> 
    

이 코드 반환 (모든 환경에서) 다음과 같은 오류 :

ORA-06550: line 1, colunm 8: PLS-00306: 
wrong number or types of arguments in call to 
'PR_CONSULTA_DADOS_ROBO' ORA-06550: line 1, colunm 8: PL/SQL: 
Statement ignored; 
  • 다른 컴퓨터 (다른 개발자)에게 응용 프로그램을 게시하고 작업도했습니다. 내가 생각

일부 정보가 필요합니다 :

  • 비주얼 스튜디오 2013;
  • Oracle.DataAcess.dll 버전 4.121.1.0;
  • Oracle.ManagedDataAccess.dll 버전 4.121.1.0;
  • ISS 7.0;
  • 풀 - 32 비트 응용 프로그램 활성화 true; 사전에

당신이 나를 도울 수 있다면 ...

매우 감사합니다!

답변

2

많은 시행 착오를 거쳐 해결할 수있었습니다. 나는 그것이 최선의 해결책인지는 잘 모르지만 일했다. machine.config에서

<oracle.manageddataaccess.client>의 정의를 존재합니다

<configSections> 
    <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
</configSections> 

그래서 나는 web.config이 선언을 추가하고 완벽하게 일했다.

+0

콘솔 앱에서 동일한 문제가 발생했으며 문제가 해결되었습니다. – tlbignerd

+0

이틀간이 문제를 해결하려고합니다 ... thx. Valeu truta !! – jefissu

0

나는 동일한 문제가있어서 해결책이 될 수 있었다.

문제의 원인은 NUGET을 통해 OracleManagedDataAccessClient을 설치했지만 다른 누군가가 클라이언트의 기본 설치를 완료했기 때문입니다. 클라이언트가 설치되면 Machine.Config에 항목이 작성됩니다. NUGET을 설치하면 Web.config에 항목이 만들어집니다. 실행을 시도 할 때 다음 섹션에 대한 오류가 발생했습니다 :

<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 

이미 존재합니다. 나는 그것을 주석 내 서비스는 일을하지만 오라클이 오류와 함께 실패합니다 :

<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.**1**.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
: 클라이언트가가의 Machine.config 너무 항목이 있었다 오라클의 이전 버전이었다 설치할 때

"PLS-00306: wrong number or types of arguments in call"

web.config의 항목에 주석 처리 했으므로 응용 프로그램에서 실제 버전과 일치하지 않는 machine.config 항목을 사용했습니다.

machine.config의 항목을 web.config와 일치하도록 수정했으며 현재 모든 기능이 작동합니다.

관련 문제