为什么 ExecuteReader() 会用跟踪空格填充字符串



我有两个查询:

Q1: select name from presidents where country = 'USA'
Q2: select 'Obama' as name from presidents where country = 'USA'

使用 System.Data.Odbc.OdbcCommandExecuteReader 时,返回的DbDataReader在 Q1 的情况下包含'Obama',在 Q2 的情况下包含'Obama '

为什么在 Q2 的情况下,字符串会用尾随空格填充,补救措施是什么?

在某些情况下,修剪是丑陋的,甚至是错误的。我正在使用.Net Framework 3.5。

这是测试代码

OdbcCommand cmd = new OdbcCommand();
cmd.Connection = (OdbcConnection)DatabaseContext.Connection;
cmd.CommandText = "select 'Obama' from dual";
cmd.CommandType = CommandType.Text;
OdbcDataReader r = cmd.ExecuteReader();
if (r.Read())
{
    String s = r.GetString(0);
    // s now contains "Obama          "
    // with trailing spaces
}
ExecuteReader

基础数据源返回数据而不执行任何填充。

它是您的基础数据源(在本例中为 Oracle),它返回尾随空格。

谷歌的"oracle尾随空格"来理解为什么会这样,特别是理解Oracle中CHAR和VARCHAR数据类型之间的区别。

同时,您可以删除 SQL 查询中的尾随空格:

SELECT RTRIM(Col1) FROM ...

或者在客户端中删除它们:

string s = r.GetString(0).TrimEnd()

相关内容

  • 没有找到相关文章

最新更新