1

[To]として定義されている列 ( ) を持つテーブルがありますnvarchar(max)http://msdn.microsoft.com/en-gb/library/ms186939.aspxによると、列の最大長nvarchar(max)は 2^32 です。

4000 文字を超える文字列をバインドしようとしています (成功のしきい値は 4000 であると推測していますが、実際にはそれを証明していません) この列と HY104:1:0 で失敗します

SQLBindParameter:HY104:1:0:[Microsoft][SQL Server Native Client 11.0]無効な精度値

バインドしようとしている文字列の長さの例は 21707 です。

次の ODBC ドライバーを使用して実行しようとしましたが、結果はすべて同じです。

{SQL Server}
{SQL Server Native Client 10.0}
{SQL Server Native Client 11.0}

私が行っている実際の呼び出しは次のとおりです。

Q->ret = SQLBindParameter(Q->stmt, i, SQL_PARAM_INPUT, SQL_C_WCHAR, SQL_WVARCHAR, 
    (SQLINTEGER) (len ? len : 1), 0, data, (SQLINTEGER) len, 0);

どこ:-

len = 21707
data = unicode string of length 21708 characters (43414 bytes) followed by (WORD)0

SQL サーバーの詳細:

Microsoft SQL Server Express Edition with Advanced Services (64-bit)
10.50.2550.0
Windows 7 64 bit

私は何を間違っていますか?

4

1 に答える 1

4

答えは、長い文字列をバインドするときは、SQL_WVARCHAR ではなく SQL_WLONGVARCHAR を使用する必要があるということです。

于 2013-02-21T17:22:26.893 に答える