c++ - 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 );
解决方案
参数的评估顺序未指定。
所以你有问题item_col
with SQLBindCol(/*..*/, item_col, /*..*/, item_col++);
。
item_col
在单独的语句中增加应该可以解决您的问题。
推荐阅读
- javascript - 设置 Urlfetchapp.fetch 函数的超时值
- rest - 如何在 REST POST snaplogic 中传递正文参数?
- php - 卷曲登录+登录页面
- php - 带有部分文件名的 ftp_get() 文件(不是通配符)
- r - R - 读取大文件时如何处理“在输入连接上发现无效输入”警告?
- codenameone - 如何使用mirah为来自多个包的类创建映射器?
- android - 用户可以上传图片,即个人资料图片 - 有哪些最佳做法?
- go - 调用 eq 时出错:Go 模板中的比较类型无效
- r - 按物种、地点和日期绘制的不同直方图
- compiler-construction - LLVM IR 嵌套 phi 指令