首页 > 解决方案 > sql 选择顺序的强制转换规范的字符值无效

问题描述

我有这个数据(简化) 在此处输入图像描述

当我按int1, int2, str1该顺序选择时,我得到一个无效的转换错误。当我按str1, int1, int2顺序选择它们时,sql调用成功完成。

sql调用看起来像这样(再次简化)

Select int1, int2, str1 from table where int1 = ? (my variable)

此调用中没有实际的值转换。

代码是 c++,使用 Native Client 11 的 ODBC 连接到 MSSQL 数据库。变量和绑定列都是静态声明的,并且具有适当的类型和长度(并且按照我更改顺序时的调用顺序)。

我正在寻找任何其他想法,当我在 int 值之后选择 char 值时如何找到它失败的原因。SqlFetch 函数调用失败(尝试将返回的数据加载到绑定列时)

非简化查询返回 140 列混合类型,我想将解决方案应用于整个查询。

(注意)c ++列绑定看起来像这样,按选择的顺序排列:

sqlret = SQLBindCol(hstmt_myQuery,item_col,SQL_C_LONG,&int1, (SDWORD) sizeof(int1), &indicator[item_col++]); exec_sql_error(__FILE__, &henv, &hdbc, last_connect_time, "BindCol hstmt_myQuery", hstmt_myQuery, &sqlret);
sqlret = SQLBindCol(hstmt_myQuery,item_col,SQL_C_LONG,&int2, (SDWORD) sizeof(int2), &indicator[item_col++]); exec_sql_error(__FILE__ , &henv, &hdbc, last_connect_time , "BindCol hstmt_myQuery" , hstmt_myQuery , &sqlret  );
sqlret = SQLBindCol(hstmt_myQuery,item_col,SQL_C_CHAR,str1, (SDWORD) sizeof(str1), &indicator[item_col++]); exec_sql_error(__FILE__ , &henv, &hdbc, last_connect_time , "BindCol hstmt_myQuery" , hstmt_myQuery , &sqlret  );

标签: c++sql-server

解决方案


参数的评估顺序未指定。

所以你有问题item_colwith SQLBindCol(/*..*/, item_col, /*..*/, item_col++);

item_col在单独的语句中增加应该可以解决您的问题。


推荐阅读