odbc API
本文爲使用和測試方便,使用的是經過wrapper後的源代碼,可以在github上下載直接使用,點擊這裏下載
連接字符串
以SQL Server 2017爲例,連接字符串如下,
Driver={ODBC Driver 13 for SQL Server};Server=servername;Database=databasename;UID=usrname;PWD=password
其中,Driver={ODBC Driver 13 for SQL Server};
爲odbc驅動,可以通過以下方式查看,
開始>odbc數據源管理程序>驅動程序
關於Driver版本的選擇
截至目前爲止,總共有三個版本的Microsoft ODBC driver for sql server,選擇和使用如下,
ODBC driver | sql server database version | 安裝 |
---|---|---|
SQL server | <2005 | 通常情況下系統默認安裝 |
SQL Server Native Client * | 2005~2012 | 單獨安裝或者隨sql server數據庫一起安裝 |
ODBC Driver * for SQL Server | 2012~ | 單獨安裝或者隨sql server數據庫一起安裝 |
如果driver的版本與數據庫版本不一致很可能會出現各種問題,以以SQL Server 2017爲例,應該選取下邊的版本。
odbc driver 下載
關於數據庫連接
對於數據庫的連接,可以使用兩種接口,對應連接數據庫的兩種方式,
void connect(const char* connString);
void connect(const char* dsn, const char* user, const char* password);
分別對應於SQLDriverConnectA和SQLConnectA
的調用。
第一種調用就是使用連接字符串(個人一直傾向於使用此種方式),另一種方式使用dsn name,也可以通過odbc 配置軟件進行配置。
server
連接字符串中的server name,可以用ip地址,如果是本機部署的話可以寫127.0.0.1
,也可以用(local)
,也可以用服務器名。
注意當改變連接端口時,必須指定數據庫服務的監聽端口。
對於sql server來說,原則上能用sql server客戶端連接的servername 都可以寫在這裏用。
odbc支持哪些數據庫
odbc全稱開放數據庫庫接口,Open Database Connectivity,是爲了連接DBMS的標準API,設計初衷就是,對於不同的數據庫甚至操作系統,開發者不做或很少改動就可以繼續使用原有代碼操作數據庫(包括client和server)。
只要提供相應的驅動,原則上可以使用odbc連接任意DBMS,甚至是excel,text,或者csv。
在之前的程序開發中,對於excel作爲數據源的開發確實使用的就是odbc,但是text和csv從來沒這麼做過,似乎也沒什麼必要。
一個例子
另外,對於本文提到的開源代碼,寫了一個簡單的應用(其實沒必要,但是似乎一點兒代碼也貼總感覺哪裏不對>_<)
void RoverDataBase::load_from_db()
{
try {
odbc::EnvironmentRef env = odbc::Environment::create();
odbc::ConnectionRef conn = env->createConnection();
conn->connect("Driver={ODBC Driver 13 for SQL Server};Server=127.0.0.1;Database=HSDB;UID=sa;PWD=xqxq#1234");
conn->setAutoCommit(false);
log_info("connect database success");
odbc::PreparedStatementRef psSelect =
conn->prepareStatement("SELECT id,port FROM T_USR");
odbc::ResultSetRef rs = psSelect->executeQuery();
while (rs->next())
{
log_info("%s %d", *(rs->getString(1)), *(rs->getInt(2)));
}
}
catch (const odbc::Exception e) {
log_error("%s", e.what());
}
}