簡體   English   中英

服務器端使用C#通過ODBC數據源訪問Oracle DB失敗,而C#長數據類型映射到Oracle Number

[英]Server Side using C# to access Oracle DB through ODBC datasource failed while C# long datatype mapping to Oracle Number

我正在編寫一個WebApi,以為客戶端用戶提供上載文件,並且文件信息將通過ODBC(32位)保存到Oracle數據庫。 WebApi服務器端語言是C#。 Oracle中的文件大小數據類型為Number。 我從“新的System.IO.FileInfo(fileSavePath).Length”獲取文件大小,並且其數據類型很長。 然后通過以下代碼傳遞它:

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/zh-cn/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)...仍然失敗。

但是,如果我讓數據類型為int或小數,它可以工作:

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

所以我的問題是,為什么SQL_BIGINT(ODBC)或long(C#/。Net)無法映射到Oracle Number數據類型? 還是我錯過了一些轉換過程???

你這樣嘗試過嗎?

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
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM