Почему ExecuteReader() дополняет строки пробелами?

У меня есть два запроса:

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

Когда используешь System.Data.Odbc.OdbcCommandExecuteReader затем вернулся DbDataReader содержит 'Obama' в случае Q1 и '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
}

1 ответ

Решение

ExecuteReader возвращает данные из базового источника данных без каких-либо дополнений.

Это ваш основной источник данных, в данном случае Oracle, который возвращает конечные пробелы.

Чтобы понять причину этого, воспользуйтесь "пробелами в конце оракула", в частности, чтобы понять разницу между типами данных CHAR и VARCHAR в Oracle.

Между тем, вы можете удалить конечные пробелы в запросе SQL:

SELECT RTRIM(Col1) FROM ...

Или удалите их в клиенте:

строка s = r.GetString(0).TrimEnd()

Другие вопросы по тегам