C++ 通过 ODBC连接SQL Server 2000

说实话,ODBC确实不太好用。
我还是推荐OLEDB连接,至少用的人更多。
我认为你的代码相当复杂。

在CCWDATA类中,初始化数据库连接的部分非常混乱。
我们先看一下InitADOConn函数。
使用 COM 初始化 CoInitialize(NULL),然后创建 Connection 和 Recordset 对象。
这里有一个问题。
读取 XML 文件的方式有点重复,尤其是 //security 节点,您读取了两次。

看这一段: 程序文件 m_State = ReadXMLToCstring("DataBaseconfig.xml", "//提供", get); strConn = (_bstr_t)get; m_State = ReadXMLToCstring("DataBaseconfig.xml", "//密码", get); strConn += (_bstr_t)get; //...继续这样添加...
有一个地方把 //security 节点读了两遍,这肯定是错误的。
老实说,将连接字符串组合在一起的方式看起来很累人。
您应该立即读取所有必需的节点,然后将它们拼凑成完整的连接字符串。

再看ReadXMLToCstring函数,使用MSXML2 ::IXMLDOMDocumentPtr读取XML文件,然后通过selectSingleNode获取节点值。
这很好,但要小心错误处理。
你在这里有一席之地: 程序文件 childNode->get_nodeTypedValue(&varVal); GetCstring = (BSTR)(_bstr_t)varVal;
这里,varVal直接转换为BSTR,然后赋值给GetCstring,但是varVal的类型是VARIANT,所以你必须确保它实际上包含一个字符串值。

然后是GetFilePath函数。
您使用 GetModuleFileName 和 _splitpath 来获取文件路径。
这样看起来还可以,但是要注意路径分隔符,Windows下是\,但是字符串中必须使用\\。

最后是 CloseConn 函数。
您在此处关闭连接并初始化 COM,这似乎是正确的。

一般来说,你的代码相当复杂,尤其是XML读取部分。
建议您将XML读取部分重构并编写为单独的函数,然后在初始化连接字符串时一次性读取所有需要的节点。
这样代码就会清晰很多。

看看我的建议是否有效。

灞€鍩熺綉閲屽彧鏈変竴鍙扮數鑴戝畨瑁呬簡sql server鍏朵粬娌″畨瑁呯殑濡備綍璁块棶閭e彴鐢佃剳鐨剆ql

哈,这个问题问的是,什么是QLserver链?这实在是太拗口了,让我给你分解一下。

首先,你提到的QLserver链环实际上是一种数据库连接池技术。
简单来说,多个客户端连接到一个服务器,服务器平滑地管理这些连接。
这样做的目的是为了提高数据库访问的效率。

那么你提到的数据库工具,比如PowerBuilder、SQL Developer、PowerBuilder、Oracle PowerBuilder等都是用来运行数据库的。
它们各有不同的特点,但功能相似,都是帮助用户管理和操作数据库。

然后你提到了IP和端口,就像你家的门牌号一样。
例如 1 9 2 .1 6 8 .0.2 5 1 ,3 000,这就像您的门牌号码加上门铃号码。
如果其他人想要访问你的数据库,他们需要知道这个IP和端口。

另外,你提到的是数据库的连接配置。
比如我之前遇到过一个案例,某公司使用的数据库连接配置如下:IP为1 9 2 .1 6 8 .0.2 5 1 ,端口为3 000,数据库用户名和密码为admin,数据库名称为testdb。

所以,你提到的是,可以在数据库连接池中配置多个数据库连接,然后根据需要动态选择一个连接来使用。
这样做的目的是为了增加数据库访问的灵活性。

最后,你提到的是数据库连接池的创建过程。
比如我之前开发项目时,是按照以下步骤创建数据库连接池的:
1 .首先配置数据库连接的IP和端口,例如1 9 2 .1 6 8 .0.2 5 1 ,3 000。
2 、然后配置数据库的用户名和密码,例如admin。
3 .然后配置数据库名称,例如testdb。
4 、最后创建数据库连接池,并为连接池设置最大连接数、最小空闲连接数等参数。

这将创建一个数据库连接池。
当时我不明白为什么需要这样做,但后来我逐渐明白,这其实是一种提高数据库访问效率的方法。