ADO访问DB列名无效

最近在练习ADO访问DB,好不容易写完了一堆的类,编译通过了,结果一运行就提示列名无效。

我一直在检查是不是表中的字段名用了关键字,然后或者是程序中和表的字段名不一致啥的。因为我的查询变量定义的类型是_bstr_t,压根就没考虑到查询变量不被DB识别的问题。

汗,结果是个超低级的错误。

code1(错误的):

_bstr_t vSQL;

vSQL="SELECT * FROM Users WHERE UserName="+cUserName;//cUserName是个CString变量,两者相加,编译可行

执行。

然后结果就是这个cUserName对应输入的值无法识别,说列名无效。

其实这个SQL语句还算是简短的,长了就很麻烦,VC又不支持两个字符常量直接相加,一个SQL语句要加N次,还容易出错。

用Format就方便许多。

code2(正确的):

_bstr_t vSQL;

CString sSQL;

sSQL.Format("SELECT * FROM Users WHERE UserName='%s'",cUserName);//假如SQL语句超长,这里就很好写,不用总是加来加去

vSQL=_bstr_t(sSQL);//最后转换成DB支持的_bstr_t类型就OK了。

执行。

当然也可以在code1直接再转换一下,不用搞个CString什么的,只是format超方便,推荐之。

原文地址:https://www.cnblogs.com/arthur3/p/1939776.html