本文采用SQL2005 + VS2008环境,以ODBC API方式成功连接数据库。
1.SQL安装和环境配置
这部分网上随便搜一下都有很多资料,而且很容易就可以配置成功。
注意的关键点: SA账号配置; 远端连接配置。
配置成功后,能成功连接远端数据库,如下图所示:
2. 建控制台程序,使用ODBC API方式,语言C/C++均可。
关于ODBC的测试代码,在此不做过多的展示,皆因网上随便一搜都有很多。
这里主要说明的是SQLDriverConnect()执行失败返回-1的问题。
这个问题相信很多刚接触ODBC的人,都很容易出现,而且网上往往找不到有用的解决方法。
在这之前,我想先介绍一个函数ProcessLogMessages()。
这个函数来自MS文档,用于显示一个错误的详细情况,你可以在你的程序中直接使用。
此函数的具体代码可参见《ODBC API开发教程》。
使用例子:
1 char* szConnStrIn="Driver=SQL Server;Server=192.168.1.128,1433;UID=sa;PWD=sa;"; 2 r = SQLDriverConnect(phdbc,NULL,(SQLCHAR*)szConnStrIn,SQL_NTS,SQLConOut,sizeof(SQLConOut),&ConOutLen,SQL_DRIVER_COMPLETE); 3 if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO) { 4 //连接失败! 5 ProcessLogMessages(SQL_HANDLE_DBC,phdbc,"YYYYYY",1); 6 return -1; 7 }
3.连接数据库关键问题及解决方法
<->Driver问题:
我们可以查看PC是否装了这样的数据库驱动,位置为:
控制面板\所有控制面板项\管理工具\数据源(ODBC)
我这里只装了MSSQL的数据库,如果要用其他数据库,如MySQL、ORACLE,则需要先把数据库的驱动装好。
上图两个驱动都可以连接SQL Server数据库,喜欢用SQL Native Client驱动也可修改代码如下:
char* szConnStrIn="Driver=SQL Native Client;Server=192.168.1.128,1433;UID=sa;PWD=sa;";
<->Server或认证问题:
通常是数据库地址,端口号,用户名密码这类问题导致,检查一下就好。
<->执行语句失败:
执行例子:
1 // *) 执行具体的sql 2 r = SQLExecDirect(stmt, (SQLCHAR*)"select * from dbo.MyTab", SQL_NTS); 3 if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO) { 4 cout<<"执行失败!"<<r<<endl; 5 ProcessLogMessages(SQL_HANDLE_STMT,stmt,"YYYYYY",0); 6 return -1; 7 }
这是因为我们在connect的时候没有选择数据库,所以执行失败。
我们可以修改Connect时的选项,指定Database,如下:
char* szConnStrIn="Driver=SQL Native Client;Server=192.168.1.128,1433;UID=sa;PWD=sa;Database=chroma;";
4.总结
成功在于尝试!
以上均是本人在的一些尝试所得之经验,虽所涉及之数据库只是皮毛;
但多做尝试,是通往更高深领域的必经之路。