2

2 つのクエリがあります。

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

使用すると、Q1 の場合と Q2 の場合にSystem.Data.Odbc.OdbcCommandExecuteReader返されるDbDataReader内容が含まれます。'Obama''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
}
4

1 に答える 1

4

ExecuteReaderパディングを行わずに、基になるデータ ソースからデータを返します。

末尾のスペースを返すのは、基になるデータ ソース (この場合は Oracle) です。

これがなぜなのかを理解するために、特に Oracle の CHAR と VARCHAR データ型の違いを理解するために、「Oracle の末尾のスペース」を Google で検索してください。

一方、SQL クエリの末尾のスペースを削除することもできます。

SELECT RTRIM(Col1) FROM ...

または、クライアントでそれらを削除します。

文字列 s = r.GetString(0).TrimEnd()

于 2014-03-05T12:51:48.843 に答える