用c语言怎么连接数据库呢?

配置ODBC数据源这事儿,得先搞明白。
你跟电脑说啊,我要连个数据库,叫啥名字,用户名密码啥的。
弄完这一步,你就能用代码去操作数据库了。

然后呢,用SQL函数连数据库。
你看这代码,是个Windows下的例子:
cpp include include include
void main(){ HENV henv; //环境句柄 HDBC hdbc; //数据源句柄 HSTMT hstmt; //执行语句句柄 unsigned char datasource[]="数据源名称"; //源中设置的源名称 unsigned char user[]="用户名"; //数据库的帐户名 unsigned char pwd[]="密码"; //数据库的密码 unsigned char search[]="select xm from stu where xh=0"; SQLRETURN retcode; //记录各SQL函数的返回情况
//分配环境句柄 retcode = SQLAllocEnv(&henv); //等介于 SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL, &henv); //设置ODBC环境版本号为3 .0 retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void)SQL_OV_ODBC3 , 0); //分配连接句柄 retcode = SQLAllocConnect(henv, &hdbc); //等介于 SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); //设置连接属性,登录超时为rgbValue秒(可以没有) //SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)(rgbValue), 0); //直接连接数据源 //如果是windows身份验证,第二、三参数可以是,也可以是任何字串 //SQL_NTS 即 "" retcode = SQLConnect(hdbc, datasource, SQL_NTS, user, SQL_NTS, pwd, SQL_NTS); //分配语句句柄 retcode = SQLAllocStmt(hdbc, &hstmt); //等介于 SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); //直接执行查询语句 retcode = SQLExecDirect(hstmt, search, SQL_NTS); //将数据缓冲区绑定数据库中的相应字段(i是查询结果集列号,queryData是绑定缓冲区,BUFF_LENGTH是缓冲区长度) SQLBindCol(hstmt, i, SQL_C_CHAR, queryData[i-1 ], BUFF_LENGTH, 0); //遍历结果集到相应缓冲区 queryData SQLFetch(hstmt); /对遍历结果的相关操作,如显示等/ //注意释放顺序,否则会造成未知错误! SQLFreeHandle(SQL_HANDLE_STMT, hstmt); SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); }
这段代码是啥意思呢?你先搞个环境句柄henv,然后是连接句柄hdbc,再搞个执行语句句柄hstmt。
把数据源名字、用户名、密码写进去,然后执行SQL语句。
比如这里search就是个查询语句,SQLExecDirect直接执行它。
SQLBindCol把结果集的列绑定到缓冲区,SQLFetch遍历结果。

最后别忘了释放资源,SQLFreeHandle按顺序释放句柄。
说实话,这代码看着挺复杂的,但一步步来,其实也还好。

c语言可以连接access数据库??

说实话,你这代码块看着挺完整的,像是Visual Studio 6 时代的老古董了。
当时我刚开始搞数据库连接的时候,也踩过不少坑。
让我想想,连接Access数据库用ADO,其实挺简单的,但关键在于那几个参数怎么填对。

你这段代码里,最核心的部分就是CHmbAdoDB::Open函数。
我当年接Access的时候,通常是这样搞的:
cpp BOOL CHmbAdoDB::Open(LPCSTR lpszConnect) { // 常见的Access连接字符串格式 LPCSTR connStr = "Provider=Microsoft.Jet.OLEDB.4 .0;Data Source=C:\\path\\to\\your\\database.mdb"; // 如果是Access 2 007 +,用3 .5 提供者 // LPCSTR connStr = "Provider=Microsoft.ACE.OLEDB.1 2 .0;Data Source=C:\\path\\to\\your\\database.accdb";
try { CREATEINSTANCE(m_DbConn, Connection); m_DbConn->Open(connStr, "", "", adModeUnknown); } catch (_com_error& e) { AfxMessageBox(_T("连接失败: ") + CString(e.Description())); return FALSE; } catch (...) { AfxMessageBox(_T("未知错误")); return FALSE; } return TRUE; }
关键点来了: 1 . Provider
你得指定是哪个数据库提供者。
Jet 4 .0是老版本Access用的,现在Access 2 007 +都用ACE 1 2 .0,得看你的Access版本选哪个。
我上次用Access 2 01 3 做项目时,发现还得加个Extended Properties="Jet OLEDB:Database Password=yourpassword"来防别人偷数据。
2 . Data Source
这是绝对不能错的,得写死完整路径,别用相对路径。
比如我有个项目在D盘,直接写"D:\\MyData\\company.mdb"就行。

有意思的是,当年我有个客户数据库在服务器上,直接用本地路径肯定不行。
后来改用Provider=Microsoft.Jet.OLEDB.4 .0;Data Source=(Null);Jet OLEDB:Engine Type=5 ;Database Location=C:\\inetpub\\wwwroot\\data.mdb这种骚操作,虽然慢点但能用。

你这段代码里还漏了个东西,就是Error处理。
Access出问题特别烦人,比如密码错或者文件被别人用了。
你得加个ProviderError函数,像这样:
cpp void CHmbAdoDB::ProviderError() { if (m_DbConn->Errors->Count > 0) { _com_error pErr = NULL; for (long i = 0; i < m>Errors->Count; i++) { pErr = m_DbConn->Errors->GetItem(i); AfxMessageBox(CString(_T("SQL错误码: ")) + _T(tools::itos(pErr->NativeError)) + _T("\n错误信息: ") + CString(pErr->Description)); } m_DbConn->Errors->Clear(); } }
这玩意儿在网吧修电脑时救过我命,当时有个Access表被学生改坏了,用这个函数直接把错误码和描述弹出来,马上定位到是哪个字段被改成了文本。

不过说实话,现在搞Access连接,我更倾向于用VBA或者直接用Office的COM接口。
C++里用ADO虽然能行,但每次改数据库路径都得重新编译,特别麻烦。
我记得有个项目用ADO连接,后来改数据库要从C++里改,得把DLL路径重新打包,打包完测试环境又报错,当时真是头发掉了一大把。

你这段代码写得挺规范,但有个小建议,最好把连接字符串参数化。
现在做项目,我一般都单独写个GetAccessConnStr函数,根据不同环境返回不同连接串,比如测试环境用测试数据库路径,生产环境用生产路径。
这样以后换数据库位置,就只需要改函数,不用改所有调用处。

请问各位大侠、怎么用C语言连接access数据库、最好能详细点儿写出步骤、如果可以的话,能给代码就更好了。

配置数据库先用百度知道教程。

Access连接示例: 1 . 初始化COM:AfxOleInit(); 或 CoInitialize(); 2 . 连接字符串:strDBClass.Format(_T("Provider=Microsoft.Jet.OLEDB.4 .0;DataSource=%s;JetOLEDB:DatabasePassword=%s"), m_strUnEntryptMdbFilePath, m_strMDBPassword); 3 . 创建连接:HRESULThr = m_pConnection.CreateInstance(_uuidof(Connection)); m_pConnection->Open(m_strDBClass, _T(""), _T(""), adConnectUnspecified); 4 . 声明表单指针:_RecordsetPtr pBandRecordset; pBandRecordset.CreateInstance(__uuidof(Recordset)); 5 . 执行语句:CString strSQL(L"SELECT FROM [Band]"); m_pConnection->Execute((LPCTSTR)strSQL, NULL, 0); 6 . 提取某一项:intiBandInfo = wcscmp(colum, L"BandInfo"); while(!recordsetPtr->adoEOF){ var = recordsetPtr->GetCollect(colum); if(var.vt != VT_NULL) strName = (LPCSTR)_bstr_t(var); recordsetPtr->MoveNext(); }
具体项目用Access 2 007 ,文件路径是"C:\data\mydb.mdb"。
密码是"1 2 3 4 5 6 "。

C语言用odbc连接数据库的问题

结论: 1 . 代码示例中,使用mysql_real_connect连接到本地MySQL数据库,用户名为"mysql",密码为"mysql",数据库名为"deneme"。
2 . 查询语句为"select from Deneme",但表名未加引号,可能导致错误。
3 . 使用mysql_real_query执行查询,如果返回非0值,则表示查询错误。
4 . mysql_use_result用于获取查询结果,返回MYSQL_RES类型指针。
5 . 通过mysql_fetch_row遍历结果行,每行数据以MYSQL_ROW类型返回。
6 . mysql_num_fields和mysql_num_rows分别用于获取字段数和行数。
7 . 使用mysql_close关闭数据库连接。
8 . 编译时需链接-lmysqlclient选项,头文件位于/usr/include/mysql。
9 . 代码示例中未处理错误情况,实际应用中应检查每个MySQL函数的返回值。