2017-12-05 9 views
0

クライアントユーザーにファイルをアップロードするWebApiを作成していて、ODBC(32ビット)。 WebApiサーバー側の言語はC#です。 Oracleのファイルサイズのデータ​​型はNumberです。 "new System.IO.FileInfo(fileSavePath).Length"からファイルサイズを取得し、そのデータ型がlongです。次に、次のコードで渡します。C#を使用してODBCデータソースを介してOracle DBにアクセスするサーバー側で、Oracleへの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(); 
    } 
} 

そして、挿入操作が失敗します。 よる2つのデータ型マッピングテーブルは:

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

私はそれは問題になりませんと思いました。 は、私はコードを変更にもかかわらず:

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

およびNUMBER(19,0)へのファイルサイズのデータ​​型を設定し...それはまだfaild。

私はデータ型はintまたは小数であるとすると、それが動作するかどうかただし、:(。C#の/ネット)

Convert.ToInt32(FILE.FILESIZE)/Convert.ToDecimal(FILE.FILESIZE) 

だから私の質問は、なぜSQL_BIGINT(ODBC)または長い場合は、OracleにマップすることはできませんNumberデータ型???または私はいくつかの変換プロセスが欠場???

+0

エラーメッセージは何ですか? 「失敗した」ということはあまり有益ではない。 –

+0

使用しているODBCドライバはどれですか? MicrosoftかOracleのどちらですか? –

+0

親愛なるWernfried Domscheit:「失敗しました」は、ファイル情報レコードがUploadFileTableに挿入されなかったことを意味します。ファイルIDの戻り値がnullであり、クライアント側のエラーが500(内部サーバーエラー)であるため、サーバー側のエラーが原因で、ファイルID(他のデータを含む)がクライアント側に渡されます。申し訳ありませんが、私はODBCやOracleの設定に心配していません。私はちょうど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

私はそれを試しましたが、それでも失敗しました。ありがとうございました。 –

関連する問題