使用c語言通過odbc 連接數據庫,其中的配置操作相當的麻煩,之前不接觸數據庫編程的,當時想想無非就是存儲數據而已。 現在想想,也還是存儲數據。
第一步數據源配置,在所有程序-> 管理工具->數據源(odbc) 。 也可以在控制面板下面找到管理工具這一項。
說道配置,真的說來話長。
使用的是 sql server 2005 express 版本,精簡,免費,最重要的原因是pc上已經安裝了此版本。
因爲太過精簡的原因,連一些基本的配置工具都沒有,後來還是要到官網上去下載配置工具 SQLServer2005_SSMSEE.msi 。 通過這個工具用窗口的方式連接到數據庫。
參考的配置文檔,個人感覺這篇比較全面些 http://hi.baidu.com/zhangqijun/item/45e166ab657d691fa8cfb7ea
這裏第二副圖 你想連接的是哪個 SQL Server,看了好些文檔都說是 local。 反正我這裏是不行。偶然間不知道在哪裏看到,填的是第一幅圖中框起來的那一串。 至於這一串是怎麼生成的,不知道。 反正代表的是連接的服務器。 將此數據源命名爲myfeeling, 然後在代碼編輯中連接的,也就是這個數據源了。 測試中證實確實如此。
唉,反正是看了多篇文檔纔給胡整出來的,期間還有許多配置,被省略去。
#include <stdio.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>
int main(){
// 環境句柄
SQLHENV henv ;
// 連接句柄
SQLHDBC hdbcl ;
// 語句句柄
SQLHSTMT hstmt ;
// 返回值
SQLRETURN retcode;
UCHAR szDSN[SQL_MAX_DSN_LENGTH+1]="myfeeling", szUID[MAXNAME]="sa",szAuthStr[MAXNAME]="9527";
UCHAR sql[40]="insert into Student values('aaa','100')";
UCHAR pre_sql[29]="insert int test values(?,?)";
retcode = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
if((retcode!=SQL_SUCCESS)&&(retcode!=SQL_SUCCESS_WITH_INFO))
{
printf("環境句柄失敗!\n");
return 0;
}
SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbcl);
if ((retcode != SQL_SUCCESS )&&( retcode != SQL_SUCCESS_WITH_INFO))
{
printf("連接句柄失敗!\n");
return 0;
}
retcode = SQLConnect(hdbcl,szDSN,26,szUID,2,szAuthStr,6);
if ((retcode != SQL_SUCCESS)&&(retcode != SQL_SUCCESS_WITH_INFO))
{
printf("連接數據源失敗");
return 0;
}
retcode = SQLAllocHandle(SQL_HANDLE_STMT,hdbcl,&hstmt);
if ((retcode != SQL_SUCCESS)&&(retcode != SQL_SUCCESS_WITH_INFO))
{
printf("語句句柄失敗");
return 0;
}
retcode = SQLExecDirect(hstmt,sql,40);
SQLDisconnect(hdbcl);
SQLFreeHandle(SQL_HANDLE_DBC,hdbcl);
SQLFreeHandle(SQL_HANDLE_ENV,henv);
return 0;
}
貼上最後的代碼,看別人的代碼也是糊里糊塗的,不過還是連接上了。
沒什麼營養,做個小記。