2017-12-05 4 views
0

클라이언트 사용자에게 파일 업로드를 제공하기 위해 WebApi를 작성 중이며 파일 정보가 ODBC (32 비트). WebApi 서버 측 언어는 C#입니다. Oracle의 파일 크기 데이터 유형은 숫자입니다. "new System.IO.FileInfo (fileSavePath) .Length"에서 파일 크기를 가져오고 해당 데이터 형식이 깁니다. 그런 다음 다음 코드로 전달합니다.C#을 사용하여 ODBC 데이터 원본을 통해 Oracle DB에 액세스하는 서버 측 오라클에 C# long 데이터 형식 매핑 오류 번호

String strCmd = "INSERT INTO UPLOAD_FILE (FILENAME, FILETYPE, FILESIZE) Values (:Filename, :Filetype, :Filesize)"; 
using (OdbcConnection conn = new OdbcConnection(strConn)) 
{ 
    using (OdbcCommand cmd = new OdbcCommand(strCmd, conn)) 
    {      
    cmd.Parameters.AddWithValue(":Filename", FILE.FILENAME); //FILE is CLASS. 
    cmd.Parameters.AddWithValue(":Filetype", FILE.FILETYPE); 
    cmd.Parameters.AddWithValue(":Filesize", FILE.FILESIZE); 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    } 
} 

그리고 삽입 작업이 실패합니다. 따르면,이 데이터 형식 매핑 테이블 :

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/odbc-data-type-mappings

https://docs.oracle.com/cd/E15817_01/server.111/e10311/apa.htm

나는 그것이 아무 문제가 없어야합니다 생각했다. 은 비록 I가 코드를 변경 :

cmd.Parameters.Add(new OdbcParameter 
{ 
    ParameterName = ":Filesize", 
    OdbcType = OdbcType.BigInt, 
    Value = FILE.FILESIZE 
}); 

그리고 수의 파일 크기 (19,0)의 데이터 유형을 설정 ... 그것은 여전히 ​​faild. 나는 데이터 형식 INT 또는 10 진수하자 및 경우

그러나, 그것은 작동합니다. (/ 네트 C 번호)를 SQL_BIGINT (ODBC) 또는 긴 오라클에 매핑 할 수없는 이유

그래서 내 질문은
Convert.ToInt32(FILE.FILESIZE)/Convert.ToDecimal(FILE.FILESIZE) 

숫자 데이터 형식 ??? 아니면 일부 변환 프로세스가 그리워 ???

+0

오류 메시지가 무엇인가요? "실패했다"는 것은 매우 유익하지 않다. –

+0

어떤 ODBC 드라이버를 사용합니까? 마이크로 소프트인가 오라클인가? –

+0

친애하는 Wernfried Domscheit : "실패했습니다"는 의미는 파일 정보 레코드가 내 UploadFileTable에 삽입되지 않았 음을 의미합니다. 파일 ID (성공한 경우)를 클라이언트 측에 다른 데이터와 함께 전달하므로 서버 측의 오류는 파일 ID의 반환 값이 null이고 클라이언트 측의 오류가 500 (내부 서버 오류)이라는 것입니다. 죄송합니다 나는 ODBC 또는 오라클 설정과 familier 아니에요. 방금 ODBC 데이터 소스를 확인했습니다 ... OraDb11g_home1에 32 비트/Oracle을 표시하고 sqldeveloper 도구를 사용하여 DB에 액세스합니다. –

답변

0

이렇게 해 보셨습니까?

cmd.Parameters.Add(":Filename", OdbcType.BigInt); 
cmd.Parameters[":Filename"].DbType = DbType.Int64; 
cmd.Parameters[":Filename"].Value = FILE.FILENAME; 

cmd.Parameters.Add(new OdbcParameter { 
    ParameterName = ":Filename", 
    OdbcType = OdbcType.BigInt, 
    DbType = DbType.Int64, 
    Value = FILE.FILENAME 
}); 
+0

나는 그것을 시도했지만 여전히 실패했다. 고맙습니다. –