为什么ExecuteReader()用尾随空格填充字符串?

时间:2014-03-05 10:07:39

标签: ado.net sqlcommand dbdatareader

我有两个问题:

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

使用System.Data.Odbc.OdbcCommandExecuteReader时,如果是Q1,则返回的DbDataReader包含'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
}

1 个答案:

答案 0 :(得分:3)

ExecuteReader返回基础数据源中的数据,而不进行任何填充。

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

Google为“oracle尾随空格”了解其原因,特别是了解Oracle中CHAR和VARCHAR数据类型之间的区别。

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

SELECT RTRIM(Col1) FROM ...

或者在客户端删除它们:

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