我有两个查询:
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()