C语言ODBC操作数据库遇到的一些问题
Posted 文竹balala
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言ODBC操作数据库遇到的一些问题相关的知识,希望对你有一定的参考价值。
问题一:连接失败
我成功装了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);
以上是关于C语言ODBC操作数据库遇到的一些问题的主要内容,如果未能解决你的问题,请参考以下文章