oracle - .NETCore Oracle ManagedDataAccess 客户端:无法读取 BLOB(TTC 错误)
问题描述
我有 .NET Core 应用程序,我们正在尝试使用 Oracle 托管数据访问客户端(目前它只有 beta 版)。
但是,当我从数据库中读取 BLOB 时,它会出现“TTC 错误”。有谁知道如何进行?
using (OracleConnection conn = new OracleConnection("Data Source=db;User ID=userid;Password=pass;Pooling=False;"))
{
conn.Open();
var sql = "SELECT id, blobdata FROM templ";
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.CommandType = CommandType.Text;
OracleDataReader reader = cmd.ExecuteReader();
using (reader)
{
while (reader.Read()) //TTC Error
{
}
}
“TTC 错误”是主要的异常消息。
解决方案
这并不理想,但我今天遇到了这个问题并最终使用 DBMS_LOB.SUBSTR 函数以 2000 的卡盘读取它(2000 是 RAW 可以达到的最大)。
下面是一个查询,它返回一行,其中每一行是文件在特定偏移量处的 2K 块。
WITH
INFO
AS
(
SELECT
dbms_lob.getlength(A.FILE_CONTENT) AS FILE_CONTENT_LENGTH,
MOD(dbms_lob.getlength(A.FILE_CONTENT),2000) AS MOD,
CASE
WHEN MOD(dbms_lob.getlength(A.FILE_CONTENT),2000) > 0 THEN TRUNC((dbms_lob.getlength(A.FILE_CONTENT)/2000) + 1)
ELSE TRUNC(dbms_lob.getlength(A.FILE_CONTENT)/2000)
END INTERATION_COUNT,
A.FILE_CONTENT,
A.FILE_ID
FROM TABLE_OF_FILES A WHERE A.FILE_ID = 345321561
)
,OFFSETS AS
(
SELECT
(2000 * (ROWNUM-1)) + 1 AS OFFSET,
I.MOD,
I.FILE_CONTENT_LENGTH,
I.FILE_CONTENT,
I.FILE_ID,
I.INTERATION_COUNT
FROM INFO I
CONNECT BY LEVEL <= I.INTERATION_COUNT
)
,RESULT AS
(
SELECT
DBMS_LOB.SUBSTR(O.FILE_CONTENT, 2000, O.OFFSET) AS CONTENT,
O.OFFSET,
O.MOD,
O.FILE_CONTENT_LENGTH,
O.FILE_ID,
O.INTERATION_COUNT
FROM OFFSETS O
)
SELECT * FROM RESULT R ORDER BY R.OFFSET ASC;
推荐阅读
- c# - 在本地网络上嗅探安卓设备的 TCP 数据包
- c# - 在 SerialPort 上拒绝访问“COM”
- angular - 错误类型错误:无法读取未定义的属性“垫子”
- css - 自定义 CardActionArea 悬停效果
- c# - 通过 RDP 使用 WPF 的 Direct2d
- api - 如果服务器调用 API,API 会检测到什么 IP?
- .net-core - Windows 服务器和 .net Core 上的 rkt
- arduino - 如何将 MAC 字符串转换为字节数组?
- c# - 如何在运行时将脚本添加到实例化对象?
- html - 什么是 asp:panel 在 asp.net mvc 中的替代品