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操作数据库遇到的一些问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言ODBC操作MySQL数据库

第十二章:使用C语言(Python语言)操作Sqlserver2019数据库

使用c语言操作sql server数据库

使用c语言操作sql server数据库

带有Access DB的R中的ODBC是不是存在语言问题?

简要叙述下 ODBC ,OLEDB 和ADO之间的区别和联系!