这是如何重现它:
class Program
{
const string testSql = @"
SELECT extension,
CASE UPPER (EXTENSION)
WHEN 'DOC' THEN 'application/msword'
WHEN 'DOCX' THEN 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
WHEN 'XLS' THEN 'application/vnd.ms-excel'
WHEN 'XLSX' THEN 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
WHEN 'PPT' THEN 'application/vnd.ms-powerpoint'
WHEN 'PPTX' THEN 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
WHEN 'EPS' THEN 'application/postscript'
WHEN 'GIF' THEN 'image/gif'
WHEN 'BMP' THEN 'image/bmp'
WHEN 'JPG' THEN 'image/jpeg'
WHEN 'MP4' THEN 'video/mp4'
WHEN 'PDF' THEN 'application/pdf'
WHEN 'PNG' THEN 'image/png'
WHEN 'PSD' THEN 'image/vnd.adobe.photoshop'
WHEN 'TIF' THEN 'image/tiff'
WHEN 'TIFF' THEN 'image/tiff'
WHEN 'ZIP' THEN 'application/zip'
ELSE 'text/plain'
END AS mime_type
FROM (
select 'bmp' as extension from dual
union all
select 'jpg' as extension from dual
union all
select 'tif' as extension from dual
union all
select 'pdf' as extension from dual
union all
select 'zip' as extension from dual
union all
select 'gif' as extension from dual
union all
select 'txt' as extension from dual
)";
const string _connString = "Data Source = mydatabase; User Id = myuser; Password=mypw;Min Pool Size=1;";
static void Main(string[] args)
{
using (var myconn = new OracleConnection(_connString))
{
myconn.Open();
OracleCommand oc = new OracleCommand(testSql, myconn);
using (OracleDataReader odr = oc.ExecuteReader(System.Data.CommandBehavior.Default))
{
while (odr.Read())
{
var s = odr.GetString(odr.GetOrdinal("MIME_TYPE"));
Console.WriteLine($"Extension: {odr[0]} Mime type: {odr[1]}");
}
}
Console.ReadKey();
}
}
}
我得到的是这个:
Extension: bmp Mime type: image/bmp?
Extension: jpg Mime type: image/jpeg?
Extension: tif Mime type: image/tiff?
Extension: pdf Mime type: application/pdf
Extension: zip Mime type: application/zip
Extension: gif Mime type: image/gif?
Extension: txt Mime type: text/plain?
看着那(这 '?'在某些行的末尾。问题是:这是我的Oracle客户端上的错误还是在System.Data.OracleClient中?
我们遇到了同样的问题。这是system.data.oracleclient中的一个问题。所以我们使用了基于System.Data.OracleClient mono项目的非官方库:https://github.com/ericmend/oracleClientCore-2.0这确实解决了额外符号的问题,但System.Data.Oracleclient读取大数据的速度非常慢,因为很久以前它已被弃用但直到oracle发布.net核心的官方客户端,可用于小型数据集。
请看这个帮助我们的类似帖子:.NET Core 2 + System.Data.OracleClient. Chinese characters doesn't work