System.Data.OracleClient和.Net Core 2:有时候是附加符号吗?

时间:2017-11-09 11:26:20

标签: oracle .net-core .net-core-2.0

以下是如何重现它:

  1. 制作新的控制台.Net Core 2项目。
  2. 从NuGet添加System.Data.OracleClient。
  3. 使用以下方法更改课程:

    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();  
            }  
        }  
    }  
    
  4. 更改数据库,用户和密码并启动程序。

  5. 我得到的是:

    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中?

1 个答案:

答案 0 :(得分:2)

我们遇到了同样的问题。这是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