您的位置:首页 > 编程语言 > C语言/C++

C语言ODBC操作数据库遇到的一些问题

2016-10-27 20:05 1386 查看
问题一:连接失败

我成功装了SQLSERVER2008,并且成功配置数据源,测试也成功了。但是在vs2013中用代码连接数据库时,SQLConnect始终返回-1 ,百思不得其解,最后在网上查阅资料后终于发现了

解决办法:

通过ODBC编程时,不要用UNICODE字符集,具体操作为:项目属性(最后一个)--配置属性--常规--项目默认值--字符集,将使用Unicode字符集改为未设置即可
。这时候下边这句代码就不会报错,不然会一直提示你把SQLCHAR改为SQLWCHAR。

retcode = SQLConnect(hdbc,
(SQLCHAR*)"SPJ", (SWORD)strlen((char*)"student"),
(SQLCHAR*)"sa", (SWORD)strlen((char*)"sa"),
(SQLCHAR*)"sa", (SWORD)strlen((char*)"sa"));


问题二:对数据库进行查、增、删、改

连接失败后就要对其进行下一步的操作了。包括看网上相关的别人写的博客,还有书上的例子,都不是很清楚所调用的几个参数的意思到底是什么,所以只能去参考msdn的文档了,官方文档:https://msdn.microsoft.com/library

其中有一点就是要清楚SQLExecDirect()和SQLPrepare()这两个函数的区别,前者是直接执行SQL语句,然后就可以调用SQLFetch()了,而后者并没有直接执行,而是一个准备阶段,比如插入数据,需要在后续的操作中通过SQLBindParameter()来指明要插入的数据,然后在通过SQLExecute()去执行。

最后要注意的是在SQLPrepare()中调用语句时对于变量可以用“?”来代替,例如下边所示。

retcode = SQLPrepare(hstmt, (SQLCHAR*)"insert into S(sno,sname,status,city) values(?,?,?,?)", SQL_NTS);
retcode = SQLPrepare(hstmt, (SQLCHAR*)"update S set sno=?,sname=?,status=?,city=? where sno='S5'", SQL_NTS);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: