C++中,查询sqlserver时 sql语言中如何引用int变量
答案:2 悬赏:40
解决时间 2021-01-26 08:20
- 提问者网友:容嬷嬷拿针来
- 2021-01-25 11:50
C++中,查询sqlserver时 sql语言中如何引用int变量
最佳答案
- 二级知识专家网友:煞尾
- 2021-01-25 12:37
可以自己先用sprintf,或者CString类的Format函数把SQL语句格式化好之后,再传给Open函数,如:
int i=1;
CString strSQL;
strSQL.Format("SELECt * FROM Line Where ID=%d", i);
m_pRecordset->Open(strSQL.GetBuffer(100),m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);//执行SQL语句
追问:strSQL.GetBuffer(100)这个是什么意思
还有还是有错
错误3error C2664:不能将参数 1 从“const char [31]”转换为“const wchar_t *”e:\空间数据库\sql\sql\sqlview.cpp183
追答:m_pRecordset->Open函数需要一个LPCTSTR类型的参数,所以要用CString类的GetBuffer函数获得一个字符串指针,根据VS的不同版本,GetBuffer可能不需要参数,如果编译的时候报错,把里面的100去掉再试试。如果编译报其它错,再追问。
看你的报错信息,你的工程用的应该是宽字符,所以字符串都是wchar_t *类型的,一个字符要占用两个字节,需要修改一下:
int i=1;
CString strSQL;
strSQL.Format("SELECt * FROM Line Where ID=%d", i);
wchar_t *pSQL = strSQL.AllocSysString();
m_pRecordset->Open(pSQL,m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);//执行SQL语句改成上面的代码再试试。
追问:有错 错误在这句话 si.Format("SELECt * FROM Line Where ID=%d", i);
还是这个原因 不能将参数 1 从“const char [31]”转换为“const wchar_t *”
追答:这样的话,改一下试试:
si.Format(_T("SELECt * FROM Line Where ID=%d"), i);
追问:OK啦 多谢多谢 那这是什么原因啊
追答:你建工程的时候可能选择了Unicode字符集,它的一个字符需要占两个字节,跟我们平常的ANSI字符集一个字符占一字节不一样,所以写字符串的时候用_T这个宏来适配一下。如果自己在char*和wchar_t*之间转换的话,会比较麻烦。
int i=1;
CString strSQL;
strSQL.Format("SELECt * FROM Line Where ID=%d", i);
m_pRecordset->Open(strSQL.GetBuffer(100),m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);//执行SQL语句
追问:strSQL.GetBuffer(100)这个是什么意思
还有还是有错
错误3error C2664:不能将参数 1 从“const char [31]”转换为“const wchar_t *”e:\空间数据库\sql\sql\sqlview.cpp183
追答:m_pRecordset->Open函数需要一个LPCTSTR类型的参数,所以要用CString类的GetBuffer函数获得一个字符串指针,根据VS的不同版本,GetBuffer可能不需要参数,如果编译的时候报错,把里面的100去掉再试试。如果编译报其它错,再追问。
看你的报错信息,你的工程用的应该是宽字符,所以字符串都是wchar_t *类型的,一个字符要占用两个字节,需要修改一下:
int i=1;
CString strSQL;
strSQL.Format("SELECt * FROM Line Where ID=%d", i);
wchar_t *pSQL = strSQL.AllocSysString();
m_pRecordset->Open(pSQL,m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);//执行SQL语句改成上面的代码再试试。
追问:有错 错误在这句话 si.Format("SELECt * FROM Line Where ID=%d", i);
还是这个原因 不能将参数 1 从“const char [31]”转换为“const wchar_t *”
追答:这样的话,改一下试试:
si.Format(_T("SELECt * FROM Line Where ID=%d"), i);
追问:OK啦 多谢多谢 那这是什么原因啊
追答:你建工程的时候可能选择了Unicode字符集,它的一个字符需要占两个字节,跟我们平常的ANSI字符集一个字符占一字节不一样,所以写字符串的时候用_T这个宏来适配一下。如果自己在char*和wchar_t*之间转换的话,会比较麻烦。
全部回答
- 1楼网友:街头电车
- 2021-01-25 13:55
CString sql;
sql.Format(_T("SELECt * FROM 表名 Where ID=%d"),i);
USES_CONVERSION;
LPSTR strSQL=T2A(sql);
m_pRecordset->Open(strSQL,
m_pConnection.GetInterfacePtr(),
adOpenStatic,
adLockOptimistic,
adCmdText);
如上,把int型变量i 组合成cstring字符串,然后类型转换,就可以用了。
可以组合各种数据类型,char要加'%s'例如char str;sql.Format(_T("SELECt * FROM 表名 Where ID='%s'"),str);
sql.Format(_T("SELECt * FROM 表名 Where ID=%d"),i);
USES_CONVERSION;
LPSTR strSQL=T2A(sql);
m_pRecordset->Open(strSQL,
m_pConnection.GetInterfacePtr(),
adOpenStatic,
adLockOptimistic,
adCmdText);
如上,把int型变量i 组合成cstring字符串,然后类型转换,就可以用了。
可以组合各种数据类型,char要加'%s'例如char str;sql.Format(_T("SELECt * FROM 表名 Where ID='%s'"),str);
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯