0

列に挿入しようとしていますが、挿入している文字列の最初の文字しか表示されません。私はしばらくの間、この問題に頭を悩ませてきました。

私のプログラムでは Unicode が定義されています。ODBC と Sybase SQLAnywhere を使用しています。プログラムはコンパイラ エラーなしで実行され、挿入しようとしている列は varchar を取ります。Windows Server 2003 で odbc32.lib の SQLBindParameter を使用しています (警告:: レガシー コードが着信しています)。

Verify は、私が定義したアサートです。EFields は、TSTRING が次のように定義されている std::map です。

typedef std::basic_string<TCHAR> TSTRING;

これが私のODBCコードです。

bufSize = sizeof(TCHAR) * (EFields.find(_T("clientipaddress"))->second.length()); //not null terminated
VERIFY(::SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_TCHAR, SQL_VARCHAR, EFields.find(_T("clientipaddress"))->second.length() , 0 , 
        (SQLPOINTER)EFields.find(_T("clientipaddress"))->second.c_str(), bufSize, NULL) == SQL_SUCCESS);

渡される文字列は IP です (これは 10.1 から始まります)。IPV6 がより一般的に使用されるようになったときにコードが壊れないように、varchar を使用するように依頼されました。よろしくお願いします。

4

1 に答える 1

0

データベースで Varchar から Nvarchar に変更すると、問題が解決しました。

于 2012-08-10T00:48:27.543 に答える