服务器端使用C#通过ODBC DataSource访问Oracle DB时,当C#长数据类型映射到Oracle编号时,服



我正在编写WebAPI,以向客户端用户提供上传文件,并且文件信息将通过ODBC(32位)保存到Oracle数据库。WebAPI服务器端语言是C#。Oracle中的Filesize Datatype是号码。我从" new System.io.io.fileinfo(fileAvePath).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://learn.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
});

并将Filesize的数据类型设置为编号(19,0)...它仍然失败。

但是,如果我让数据类型为int或十进制,并且有效:

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

所以我的问题是为什么SQL_BIGINT(ODBC)或Long(C#/。Net)无法映射到Oracle编号DataType ???或者我错过了一些转换过程???

您是否尝试过?

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

最新更新