ODBC+C/C++ 資料庫操作
什麼是ODBC
ODBC(Open Database Connectivity) 是一個數據庫的API介面,可以使C/C++程式呼叫連線資料庫,通過SQL語句對資料庫進行操作。
ODBC怎麼用
環境:
vs2013+sqlserver2012-c/c++
- 配置系統資料來源
控制面板-管理工具-32位(或64位)ODBC資料來源-系統DSN-新建
注意:使用網路登陸ID的Windows NT驗證
我在這裡遇到了很大BUG,導致後面連線資料庫總是連不上。
- 連線資料庫
#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;
}
-
相關函式及操作
- 查詢
query = “select ……”
再用SQLExecDirect函式執行query語句
插入(帶引數) ——準備-執行
query="insert……?" 引數處用?代替
準備-使用SQLPrepare函式
繫結引數-使用SQLBindParameter函式
執行-使用SQLExecute函式
帶引數的另一種解決辦法
使用strcat字串拼接
- 查錯
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.其他注意事項
- 每一次呼叫SQL函式前後都需要以下語句
retcode =SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
- 注意SQL、ODBC、C間的資料轉化
注意SQL_C_FLOAT 和SQL_FLOAT不一樣(一個是6一個是7)
- 注意繫結引數的時候的陣列大小
相關推薦
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<