我有两个问题:
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
}
答案 0 :(得分:3)
ExecuteReader
返回基础数据源中的数据,而不进行任何填充。
这是您的基础数据源,在本例中是Oracle,它返回尾随空格。
Google为“oracle尾随空格”了解其原因,特别是了解Oracle中CHAR和VARCHAR数据类型之间的区别。
同时,您可以删除SQL查询中的尾随空格:
SELECT RTRIM(Col1) FROM ...
或者在客户端删除它们:
string s = r.GetString(0).TrimEnd()