从dot net core中的Oracle数据库中获取数据时忽略特殊字符

时间:2018-03-29 18:41:51

标签: c# oracle .net-core

更新
事实证明这是非官方Oracle数据提供商的一个问题 我刚开始使用this recently released official beta,这个问题就消失了。

我有一个dot net core项目,我正在使用this从Oracle数据库中获取数据。这适用于大多数数据,但有时我会遇到异常。

<%= simple_form_for @applicant, url: applicants_profile_path, method: :patch do |f| %>
  <%= f.input :first_name %>
  <%= f.button :submit, "submit" %>
<% end %>

当我使用SQL客户端将数据导出为csv时,列中似乎会出现一些特殊字符导致此问题。

当我在记事本上打开它时,我在第2行看到了一个额外的空间 “TEST”
“测试”

但是当我在Submlime上打开它时,我看到this special character

如何忽略此类字符并继续获取数据?

这是异常和堆栈跟踪:
“索引和长度必须指代字符串中的位置。\ r \ n参数名称:长度”

using (OracleConnection connection = new OracleConnection(connectionString))
{
  OracleCommand command = new OracleCommand(selectStatement, connection);
  command.Connection.Open();

  using (OracleDataAdapter da = new OracleDataAdapter(command))
  {
    da.Fill(dataTable); // line throws exception shown below
    command.Connection.Close();
    da.Dispose();
  }
}

1 个答案:

答案 0 :(得分:0)

根据您的SELECT语句,您可以使用正则表达式替换所有“特殊字符”。这可能取决于您想要替换它们的内容!如果它们只发生在值的末尾,那么你会想要这样的东西:

REGEXP_REPLACE(mycolumn, '[^[:print:]]+$', '')

这将替换值末尾的所有不可打印的字符。如果你在字符串中间也有不可打印的字符,你可能想要用空格替换它们,或者根本没有替换它们,如上所述:

REGEXP_REPLACE(mycolumn, '[^[:print:]]+', '')

另一种可能性是,这是由Oracle客户端引起的,或者是由导出功能写入CSV文件。

希望这有帮助。