2014-03-05 166 views
1

我有兩個疑問:爲什麼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''Obama '在Q2的情況下。

爲什麼在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 
} 

回答

3

ExecuteReader返回數據而不做任何填充。

它是你的底層數據源,在這種情況下是Oracle,它返回尾部空格。

Google針對「oracle尾部空格」來理解這是爲什麼,特別是要理解Oracle中CHAR和VARCHAR數據類型之間的區別。

同時,你可以刪除的尾隨空格在SQL查詢:

SELECT RTRIM(Col1) FROM ... 

或者在客戶端刪除:

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

+0

事實上'從'dual'選擇'x'與從'dual'選擇trim('x')不一樣 –