VC 里面 字符串中引用变量怎么做?

freckyliao 2009-10-15 09:37:35
vb.net 里面是这样做的(我说的就是那个strModel):
strsql = "select distinct model,testpara,tfspara from model where model='" & strModel & "'"


VC6.0 我这么做有问题吗?如果不对,要怎么做呢?(里面的连接字段是从ini文件读取的。)
我在用的时候总是读取不到连接信息。
ini文件:
[Connection]
SqlServerName=cnaecfuyd000072
SqlUSER=sa
SqlPWD=123623255
SqlDatabase=master

	GetPrivateProfileString(_T("Connection"),_T("SqlServerName"),_T(""),ServerName,sizeof(ServerName),_T("E:\\GetSVRDT.ini")); 
GetPrivateProfileString(_T("Connection"),_T("SqlUSER"),_T(""),UserID,sizeof(UserID),_T("E:\\GetSVRDT.ini"));
GetPrivateProfileString(_T("Connection"),_T("SqlPWD"),_T(""),Password,sizeof(Password),_T("E:\\GetSVRDT.ini"));
GetPrivateProfileString(_T("Connection"),_T("SqlDatabase"),_T(""),SqlDatabase,sizeof(SqlDatabase),_T("E:\\GetSVRDT.ini"));

string strConn("provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog='+ SqlDatabase +';data source='+ ServerName +';User ID='+ UserID +';Password='+ Password +'");
...全文
193 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
frecky8504 2009-10-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 freckyliao 的回复:]
vb.net 里面是这样做的(我说的就是那个strModel):
VB.NET codestrsql="select distinct model,testpara,tfspara from model where model='"& strModel&"'"

VC6.0 我这么做有问题吗?如果不对,要怎么做呢?(里面的连接字段是从ini文件读取的。)
我在用的时候总是读取不到连接信息。
ini文件:
[Connection]
SqlServerName=cnaecfuyd000072
SqlUSER=sa
SqlPWD=123623255
SqlDatabase=master
C/C++ code GetPrivateProfileString(_T("Connection"),_T("SqlServerName"),_T(""),ServerName,sizeof(ServerName),_T("E:\\GetSVRDT.ini"));
GetPrivateProfileString(_T("Connection"),_T("SqlUSER"),_T(""),UserID,sizeof(UserID),_T("E:\\GetSVRDT.ini"));
GetPrivateProfileString(_T("Connection"),_T("SqlPWD"),_T(""),Password,sizeof(Password),_T("E:\\GetSVRDT.ini"));
GetPrivateProfileString(_T("Connection"),_T("SqlDatabase"),_T(""),SqlDatabase,sizeof(SqlDatabase),_T("E:\\GetSVRDT.ini"));string strConn("provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog='+ SqlDatabase +';data source='+ ServerName +';User ID='+ UserID +';Password='+ Password +'");
[/Quote]

答案来了。引号打多了并不是好事。

char ServerName[200];
char UserID[200];
char Password[200];
char Database[200];

//-------------------------Open GetSVRDT.ini to get sql parameter---------------------------
GetPrivateProfileString(_T("Connection"),_T("SqlServerName"),_T(""),ServerName,sizeof(ServerName),_T(".\\GetSVRDT.ini"));
GetPrivateProfileString(_T("Connection"),_T("SqlUSER"),_T(""),UserID,sizeof(UserID),_T(".\\GetSVRDT.ini"));
GetPrivateProfileString(_T("Connection"),_T("SqlPWD"),_T(""),Password,sizeof(Password),_T(".\\GetSVRDT.ini"));
GetPrivateProfileString(_T("Connection"),_T("SqlDatabase"),_T(""),Database,sizeof(Database),_T(".\\GetSVRDT.ini"));
//------Focus below code,maybe something wrong here ---------:
string strConn;
strConn=strConn+"provider=SQLOLEDB.1;Persist Security Info=True;data source="+ServerName
+";Initial Catalog="+Database
+";User ID="+UserID
+";Password="+Password;
wocow3 2009-10-15
  • 打赏
  • 举报
回复
字符串中的"用转义字符\"
string strConn("provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog=
\"%s\";data source=\"%s\";User ID=\"%s\";Password=\"%s\"",ServerName,UserID,Password,Database);
frecky8504 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sunm42000 的回复:]
引用 8 楼 frecky8504 的回复:
那是不是要这样写?
C/C++ codestring strConn("provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog="%s";data source="%s";User ID="%s";Password="%s"",ServerName,UserID,Password,Database);

%s两边不要冒号了
[/Quote]

这样的话错误是:
gettime.cpp
E:\TDdownload\dll1031\gettime.cpp(34) : error C2065: 's' : undeclared identifier
E:\TDdownload\dll1031\gettime.cpp(34) : error C2296: '%' : illegal, left operand has type 'char [64]'
E:\TDdownload\dll1031\gettime.cpp(34) : error C2143: syntax error : missing ')' before 'string'
E:\TDdownload\dll1031\gettime.cpp(34) : error C2059: syntax error : ')'
sunm42000 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 frecky8504 的回复:]
那是不是要这样写?
C/C++ codestring strConn("provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog="%s";data source="%s";User ID="%s";Password="%s"",ServerName,UserID,Password,Database);
[/Quote]
%s两边不要冒号了
frecky8504 2009-10-15
  • 打赏
  • 举报
回复
我这么做 的:
	string strConn("provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog='%s';data source='%s';User ID='%s';Password='%s'",ServerName,UserID,Password,Database);


出错提示是:
E:\TDdownload\dll1031\gettime.cpp(34) : error C2661: 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' : no overloaded function takes 5 parame
ters
frecky8504 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fandh 的回复:]
引用 4 楼 joimson 的回复:
设个断点跟踪一下

看GetPrivateProfileString()这个函数能否获取一个字符串,如果获得了,说明没有问题。那就是在连接的时候出现的问题。如果没有获取到,就说明,你给该函数传参的时候有问题。

同意楼上,最好能打印出strConn,看看是否正确!
[/Quote]
这个已经试过了,是可以取出来的。
frecky8504 2009-10-15
  • 打赏
  • 举报
回复
那是不是要这样写?
	string strConn("provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog="%s";data source="%s";User ID="%s";Password="%s"",ServerName,UserID,Password,Database);
fandh 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 joimson 的回复:]
设个断点跟踪一下

看GetPrivateProfileString()这个函数能否获取一个字符串,如果获得了,说明没有问题。那就是在连接的时候出现的问题。如果没有获取到,就说明,你给该函数传参的时候有问题。
[/Quote]
同意楼上,最好能打印出strConn,看看是否正确!
  • 打赏
  • 举报
回复
string str = string("a") + "bb" +"cc";
之后
str里面的内容就是 "abbcc"

sunm42000 2009-10-15
  • 打赏
  • 举报
回复
可以用CString的format函数
strConn.Format( "connect = %s", szConnect );
另外可以加个断点看下确实读取到了目标字段
joimson 2009-10-15
  • 打赏
  • 举报
回复
设个断点跟踪一下

看GetPrivateProfileString()这个函数能否获取一个字符串,如果获得了,说明没有问题。那就是在连接的时候出现的问题。如果没有获取到,就说明,你给该函数传参的时候有问题。
bragi523 2009-10-15
  • 打赏
  • 举报
回复
''中间加%s
bragi523 2009-10-15
  • 打赏
  • 举报
回复
CString str("select distinct model,testpara,tfspara from model where model=' '",strModel)
frecky8504 2009-10-15
  • 打赏
  • 举报
回复
坐等结果。
wocow3 2009-10-15
  • 打赏
  • 举报
回复
不用STL,用MFC的CString
CString strConn;
strConn.Format("provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog=
\"%s\";data source=\"%s\";User ID=\"%s\";Password=\"%s\"",ServerName,UserID,Password,Database);
frecky8504 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wocow3 的回复:]
字符串中的"用转义字符\"
string strConn("provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog=
\"%s\";data source=\"%s\";User ID=\"%s\";Password=\"%s\"",ServerName,UserID,Password,Database);
[/Quote]

错误信息变成:
E:\TDdownload\connTest\test.cpp(33) : error C2661: 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' : no overloaded function takes 5 parameters

说是不能有5 个参数,怎么搞啊?

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧