1. 程式人生 > >ODBC+C/C++ 資料庫操作

ODBC+C/C++ 資料庫操作

 什麼是ODBC

ODBC(Open Database Connectivity) 是一個數據庫的API介面,可以使C/C++程式呼叫連線資料庫,通過SQL語句對資料庫進行操作。

 ODBC怎麼用

環境:

vs2013+sqlserver2012-c/c++

  1. 配置系統資料來源

控制面板-管理工具-32位(或64位)ODBC資料來源-系統DSN-新建

注意:使用網路登陸IDWindows NT驗證

我在這裡遇到了很大BUG,導致後面連線資料庫總是連不上。

  1. 連線資料庫

#include <iostream> 

#include <windows.h> 

#include "sqlext.h" 

using namespace std;

SQLHENV henv;  //環境控制代碼

SQLHDBC hdbc;  //連線控制代碼

SQLHSTMT hstmt;  //語句控制代碼

SQLRETURN retcode; //返回值

/*ODBC API訪問資料庫:連線資料庫*/

SQLINTEGER cb1 = 0, cb2 = SQL_NTS;

void InsertOneBook();

void test();

int CheckStock(char* bookid);

int main(){

   /*分配環境控制代碼*/

    retcode =SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);

    if (retcode == SQL_SUCCESS|| retcode == SQL_SUCCESS_WITH_INFO){

       /*設定ODBC環境屬性*///OK

        retcode =SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

        if (retcode ==SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){

            /*分配連線控制代碼*/  //ok

            retcode =SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

            if (retcode ==SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){

                /*連線到資料來源*/  //ok

                retcode =SQLConnect(hdbc, (SQLCHAR*)"sqlding", SQL_NTS,(SQLCHAR*)"sa", SQL_NTS, (SQLCHAR*)"1234", SQL_NTS);

                //cout<< retcode << endl;

                if (retcode ==SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){

                    /*分配語句控制代碼*/  

                    retcode =SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

                    if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){

                        /*處理資料*/

                       //這裡是操作

                        cout<< "ok" << endl;

                       SQLFreeHandle(SQL_HANDLE_STMT, hstmt);

                    }

                   SQLDisconnect(hdbc);

                }

               SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

            }

        }

    }

    return 0;

}

  1. 相關函式及操作
    1. 查詢

query = select ……”

再用SQLExecDirect函式執行query語句

插入(帶引數) ——準備-執行

query="insert……?" 引數處用?代替

準備-使用SQLPrepare函式

繫結引數-使用SQLBindParameter函式

執行-使用SQLExecute函式

帶引數的另一種解決辦法

使用strcat字串拼接

  1. 查錯

SQL的函式會返回一個SQLRETURN的值(假設賦給retcode),根據retcode的值可以判斷是否執行成功

如果失敗,可以使用下面這段程式碼查錯

SQLCHARSqlState[6], SQLStmt[100], Msg[SQL_MAX_MESSAGE_LENGTH];

         SQLINTEGER NativeError;

         SQLSMALLINT i, MsgLen;

         i = 1;

         while ((retcode =SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, i, SqlState, &NativeError, Msg,sizeof(Msg), &MsgLen)) != SQL_NO_DATA)

         {

             printf("%s\n",SqlState);

             i++;

         }

其中SqlState裡存放的是錯誤的序列號,Msg裡存放的是錯誤的內容

4.其他注意事項

  1. 每一次呼叫SQL函式前後都需要以下語句

  retcode =SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

 SQLFreeHandle(SQL_HANDLE_STMT, hstmt);

  1. 注意SQLODBCC間的資料轉化

注意SQL_C_FLOAT SQL_FLOAT不一樣(一個是6一個是7

  1. 注意繫結引數的時候的陣列大小

相關推薦

C# Oracle資料庫操作

C# Oracle資料庫操作類 1 using System; 2 using System.Data; 3 using System.Collections.Generic; 4 using System.Configuration; 5 using System.D

[C++]MYSQL 資料庫操作封裝及連線池實現

Database類為單例類、執行緒安全、實現了連線池,並且封裝所需要的操作。 本程式碼在Ubuntu下測試可用,使用Mysql connector c++連線資料庫,並啟用C++11特性。 基本操作如下: //資料庫配置 DbSetting set

.NET/C#/Oracle資料庫操作

using System; using System.Data; using System.Collections.Generic; using System.Configuration; using System.Data.OracleClient;

ODBC連線MySQL資料庫操作例項

  以下展示的一段程式,完成利用ODBC對MySQL資料庫操作功能,我的編譯環境時VC6,程式碼中有詳細的解釋,如果事先完成ODBC資料來源的設定工作,那麼只要對程式碼稍作修改即可使用: #include<stdlib.h> #include<stdio

ODBC+C/C++ 資料庫操作

 什麼是ODBC ODBC(Open Database Connectivity) 是一個數據庫的API介面,可以使C/C++程式呼叫連線資料庫,通過SQL語句對資料庫進行操作。  ODBC怎麼用 環境: vs2013+sqlserver2012-c/c+

C# SqlCommand 資料庫連線操作

//資料庫操作 string strcon = "server = localhost,1433;uid = sa; pwd = 123456; database = MyDataBase"; string strSQL = "select N

C#訪問和操作MYSQL資料庫

這裡介紹下比較簡單的方式,引用MySql.Data.dll然後新增一個MySqlHelper類來對MySql資料庫進行訪問和操作。 1.將MySql.Data.dll引用到你的專案中 下載地址:MySql.Data.rar 新增引用後在你的資料庫操作類(如MyS

c++使用Accesss資料庫操作Excel表(CRecordset類詳解)

目錄 1.      動態集、快照、游標和游標庫 2.      域資料成員與資料交換 3.      SQL查詢 4. &

C#對 SQL 資料庫操作總結

C#對 SQL 資料庫操作總結                      &nbs

C#對資料庫操作(查詢,刪除,更新)

查詢: static IQueryable<Outlet> Query(string Region, string DC, string CustomerCode, string KA, string OutletCode, string NestleOutletCode

關於MFC中資料庫操作中遇到的問題:Microsoft C++ 在xxx記憶體處出現問題_com_error的另一解決方案

首先,描述一下我遇到的問題:我自己封裝ADO,將其封裝成資料庫操作類,在呼叫連線函式沒有問題,是連線上Access資料庫的,但我在呼叫查詢或者插入等操作函式時問題出現了,出現的就是標題中的問題,在網上找了很久沒有跟我相同情況的,今晚我解決了這個問題,所以想和大家分享一下,希

C# 自定義資料庫操作類 DataBase

呼叫示例: using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Web

C++使用MySql++操作資料庫例項

有朋友讓幫忙寫個C++修改資料庫中使用者名稱密碼的工具,因為他是做VPN的,要給很多客戶端展示訪問速度等,有一個固定的使用者名稱來展示,但是每次給使用者試用的是不同的密碼,是隨機生成的。所以就想到了用MySql++這個資料庫操作類庫,我們專案中也是用這個的,非常好用。MySql++簡介:MySQL++ is

c#對資料庫操作程式碼(MySql.Data.dll包)

using System; using MySQLDriverCS; using System.Data; using MySql.Data.MySqlClient; namespace 實驗室資訊管理 {     class DBHelper     {        

c# 對資料庫操作

     【學習點點滴滴】自己也才學習c#  所以寫的都是寫簡單的。 就是為了記錄學習的點點滴滴;    所以寫得比較簡。    string id=textbox.text.tostring();    sqlconnection cnn = new sqlconne

基於c語言的簡單的mysql資料庫操作

基於c語言的簡單的mysql資料庫操作 最近做專案需要利用c語言對mysql進行獲取資料的操作,於是我對mysql社群提供的c語言呼叫mysql的部分api進行了簡單封裝,這裡做下記錄,方便以後回顧。 以下是對mysql操作函式進行了簡單封裝: #include<

C# Oracle資料庫連線及操作

1、  將光碟放入光碟機,自動彈出安裝介面,選擇開始安裝; 2、  歡迎:下一步; 3、  檔案定位,所有內容預設,如果更改oracle安裝路徑,在目標路徑中進行更改,下一步; 4、  可用產品:伺服器端選擇第一個

linux下C語言程式設計操作MySQL資料庫

原文地址:http://www.2cto.com/database/201506/407827.html 在實際應用中,我們不可能在命令列登入進資料庫進行資料的查詢、插入等操作,使用者一般是使用一個介面良好的應用程式軟體來對資料進行管理。為了方便應用程式的開發,MySQ

C#】C#訪問和操作MYSQL資料庫

這裡介紹下比較簡單的方式,引用MySql.Data.dll然後新增一個MySqlHelper類來對MySql資料庫進行訪問和操作。 1.將MySql.Data.dll引用到你的專案中 新增引用後在你的資料庫操作類(如MySqlHelper.cs)中新增引用宣告

C/C++操作MySQL資料庫——增、刪、改、查

1、資料庫連結 int cppDatebase::DatabaseConnect(sBit8 *uName,sBit8 *pWord,sBit8 *dbName) {   dbHandle = mysql_init(NULL);   if(NULL == dbHandle )   {     cout<