2

我有两个疑问:

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

使用时,在 Q1 和Q2 的情况下System.Data.Odbc.OdbcCommandExecuteReader返回DbDataReader包含。'Obama''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
}
4

1 回答 1

4

ExecuteReader从底层数据源返回数据而不做任何填充。

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

谷歌“oracle 尾随空格”以了解这是为什么,特别是了解 Oracle 中 CHAR 和 VARCHAR 数据类型之间的区别。

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

SELECT RTRIM(Col1) FROM ...

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

字符串 s = r.GetString(0).TrimEnd()

于 2014-03-05T12:51:48.843 回答