鱼C论坛

 找回密码
 立即注册
查看: 2082|回复: 4

如何实现:用C语言以ADO方式读取Access数据库?

[复制链接]
发表于 2023-10-3 18:14:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 鱼儿游游 于 2023-10-3 18:16 编辑

用 C / C++ 语言(不是VC),以ADO的方式读取Access数据库。有哪位鱼油帮忙解决?谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-3 18:15:54 | 显示全部楼层
可以使用以下步骤来用C语言以ADO方式读取Access数据库:

1. 安装 Microsoft ActiveX Data Objects (ADO) 库:在代码中使用 ADO 需要安装 Microsoft ActiveX Data Objects 库。可以从 Microsoft 官网下载并安装该库。

2. 初始化 COM 库:在使用 ADO 之前,需要初始化 COM 库。可以使用 CoInitialize 函数来完成此操作。

3. 创建 Connection 对象:使用 CoCreateInstance 函数创建 Connection 对象。需要指定 CLSID 和 IID 参数,以便正确创建对象。

4. 打开数据库连接:使用 Connection 对象的 Open 方法来打开数据库连接。需要指定数据源名称、用户名和密码等参数。

5. 创建 Recordset 对象:使用 CoCreateInstance 函数创建 Recordset 对象。需要指定 CLSID 和 IID 参数,以便正确创建对象。

6. 执行 SQL 查询:使用 Recordset 对象的 Open 方法来执行 SQL 查询。需要指定 SQL 查询语句和 Connection 对象。

7. 读取查询结果:使用 Recordset 对象的 MoveNext 和 Fields 属性来读取查询结果。可以使用 Fields 属性来访问每个字段的值。

8. 关闭连接和释放对象:使用 Connection 和 Recordset 对象的 Close 方法来关闭连接和释放对象。可以使用 CoUninitialize 函数来释放 COM 库。

下面是一个示例代码,用于以ADO方式读取Access数据库:

  1. #include <windows.h>
  2. #include <oledb.h>
  3. #include <stdio.h>

  4. int main()
  5. {
  6.     HRESULT hr;
  7.     CoInitialize(NULL);

  8.     // 创建 Connection 对象
  9.     IDBInitialize* pConnection = NULL;
  10.     hr = CoCreateInstance(CLSID_MSDASQL, NULL, CLSCTX_INPROC_SERVER, IID_IDBInitialize, (void**)&pConnection);
  11.     if (FAILED(hr))
  12.     {
  13.         printf("Failed to create Connection object.\n");
  14.         CoUninitialize();
  15.         return 0;
  16.     }

  17.     // 打开数据库连接
  18.     hr = pConnection->Initialize();
  19.     if (FAILED(hr))
  20.     {
  21.         printf("Failed to open database connection.\n");
  22.         pConnection->Release();
  23.         CoUninitialize();
  24.         return 0;
  25.     }

  26.     // 创建 Recordset 对象
  27.     IDBCreateSession* pSession = NULL;
  28.     hr = pConnection->QueryInterface(IID_IDBCreateSession, (void**)&pSession);
  29.     if (FAILED(hr))
  30.     {
  31.         printf("Failed to create Session object.\n");
  32.         pConnection->Release();
  33.         CoUninitialize();
  34.         return 0;
  35.     }

  36.     IDBCreateCommand* pCommand = NULL;
  37.     hr = pSession->CreateSession(NULL, IID_IDBCreateCommand, (IUnknown**)&pCommand);
  38.     if (FAILED(hr))
  39.     {
  40.         printf("Failed to create Command object.\n");
  41.         pSession->Release();
  42.         pConnection->Release();
  43.         CoUninitialize();
  44.         return 0;
  45.     }

  46.     IDBCreateSession* pRecordset = NULL;
  47.     hr = pCommand->CreateCommand(NULL, IID_IDBCreateSession, (IUnknown**)&pRecordset);
  48.     if (FAILED(hr))
  49.     {
  50.         printf("Failed to create Recordset object.\n");
  51.         pCommand->Release();
  52.         pSession->Release();
  53.         pConnection->Release();
  54.         CoUninitialize();
  55.         return 0;
  56.     }

  57.     // 执行 SQL 查询
  58.     WCHAR* pQuery = L"SELECT * FROM MyTable";
  59.     IUnknown* pUnknown = NULL;
  60.     hr = pRecordset->CreateSession(NULL, IID_IUnknown, (IUnknown**)&pUnknown);
  61.     if (FAILED(hr))
  62.     {
  63.         printf("Failed to create Unknown object.\n");
  64.         pRecordset->Release();
  65.         pCommand->Release();
  66.         pSession->Release();
  67.         pConnection->Release();
  68.         CoUninitialize();
  69.         return 0;
  70.     }

  71.     IDBCreateCommand* pQueryCommand = NULL;
  72.     hr = pUnknown->QueryInterface(IID_IDBCreateCommand, (void**)&pQueryCommand);
  73.     if (FAILED(hr))
  74.     {
  75.         printf("Failed to create Query Command object.\n");
  76.         pUnknown->Release();
  77.         pRecordset->Release();
  78.         pCommand->Release();
  79.         pSession->Release();
  80.         pConnection->Release();
  81.         CoUninitialize();
  82.         return 0;
  83.     }

  84.     ICommandText* pCommandText = NULL;
  85.     hr = pQueryCommand->CreateCommand(NULL, IID_ICommandText, (IUnknown**)&pCommandText);
  86.     if (FAILED(hr))
  87.     {
  88.         printf("Failed to create Command Text object.\n");
  89.         pQueryCommand->Release();
  90.         pUnknown->Release();
  91.         pRecordset->Release();
  92.         pCommand->Release();
  93.         pSession->Release();
  94.         pConnection->Release();
  95.         CoUninitialize();
  96.         return 0;
  97.     }

  98.     BSTR bstrQuery = SysAllocString(pQuery);
  99.     hr = pCommandText->SetCommandText(DBGUID_DEFAULT, bstrQuery);
  100.     if (FAILED(hr))
  101.     {
  102.         printf("Failed to set Command Text.\n");
  103.         SysFreeString(bstrQuery);
  104.         pCommandText->Release();
  105.         pQueryCommand->Release();
  106.         pUnknown->Release();
  107.         pRecordset->Release();
  108.         pCommand->Release();
  109.         pSession->Release();
  110.         pConnection->Release();
  111.         CoUninitialize();
  112.         return 0;
  113.     }

  114.     IUnknown* pRecordsetUnknown = NULL;
  115.     hr = pCommandText->Execute(NULL, IID_IUnknown, NULL, NULL, (IUnknown**)&pRecordsetUnknown);
  116.     if (FAILED(hr))
  117.     {
  118.         printf("Failed to execute SQL query.\n");
  119.         pCommandText->Release();
  120.         pQueryCommand->Release();
  121.         pUnknown->Release();
  122.         pRecordset->Release();
  123.         pCommand->Release();
  124.         pSession->Release();
  125.         pConnection->Release();
  126.         CoUninitialize();
  127.         return 0;
  128.     }

  129.     IRecordset* pRecordsetObject = NULL;
  130.     hr = pRecordsetUnknown->QueryInterface(IID_IRecordset, (void**)&pRecordsetObject);
  131.     if (FAILED(hr))
  132.     {
  133.         printf("Failed to create Recordset object.\n");
  134.         pRecordsetUnknown->Release();
  135.         pCommandText->Release();
  136.         pQueryCommand->Release();
  137.         pUnknown->Release();
  138.         pRecordset->Release();
  139.         pCommand->Release();
  140.         pSession->Release();
  141.         pConnection->Release();
  142.         CoUninitialize();
  143.         return 0;
  144.     }

  145.     // 读取查询结果
  146.     while (!pRecordsetObject->adoEOF)
  147.     {
  148.         VARIANT var;
  149.         VariantInit(&var);

  150.         hr = pRecordsetObject->MoveNext();
  151.         if (FAILED(hr))
  152.         {
  153.             printf("Failed to move to next record.\n");
  154.             VariantClear(&var);
  155.             pRecordsetObject->Release();
  156.             pRecordsetUnknown->Release();
  157.             pCommandText->Release();
  158.             pQueryCommand->Release();
  159.             pUnknown->Release();
  160.             pRecordset->Release();
  161.             pCommand->Release();
  162.             pSession->Release();
  163.             pConnection->Release();
  164.             CoUninitialize();
  165.             return 0;
  166.         }

  167.         hr = pRecordsetObject->get_Fields()->GetItem(L"MyField", &var);
  168.         if (FAILED(hr))
  169.         {
  170.             printf("Failed to get field value.\n");
  171.             VariantClear(&var);
  172.             pRecordsetObject->Release();
  173.             pRecordsetUnknown->Release();
  174.             pCommandText->Release();
  175.             pQueryCommand->Release();
  176.             pUnknown->Release();
  177.             pRecordset->Release();
  178.             pCommand->Release();
  179.             pSession->Release();
  180.             pConnection->Release();
  181.             CoUninitialize();
  182.             return 0;
  183.         }

  184.         // 处理字段值
  185.         printf("%s\n", var.bstrVal);

  186.         VariantClear(&var);
  187.     }

  188.     // 关闭连接和释放对象
  189.     pRecordsetObject->Release();
  190.     pRecordsetUnknown->Release();
  191.     pCommandText->Release();
  192.     pQueryCommand->Release();
  193.     pUnknown->Release();
  194.     pRecordset->Release();
  195.     pCommand->Release();
  196.     pSession->Release();
  197.     pConnection->Release();

  198.     CoUninitialize();
  199.     return 0;
  200. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-3 18:16:29 | 显示全部楼层
要使用 C 语言以 ADO 方式读取 Access 数据库,你需要使用 COM 技术(Component Object Model)和 ADO 库。以下是一个简单的示例,展示了如何使用 C 语言和 ADO 连接到 Access 数据库并执行查询操作。

首先,确保你的系统已安装了 Microsoft Data Access Components(MDAC)。

1. 创建一个 C 语言项目

   在你喜欢的 C 语言开发环境中创建一个新项目。

2. 包含头文件和库

   在你的 C 代码文件中包含以下头文件:

  
  1.    #include <stdio.h>
  2.    #include <windows.h>
  3.    #include <ole2.h>
  4.    #include <oledb.h>
  5.    #include <msdasc.h>
  6.    
复制代码


   并确保链接以下库:

  
  1.    ole32.lib
  2.    oledb.lib
  3.    msdasc.lib
  4.    
复制代码


3. 编写代码

   下面是一个简单的示例,展示了如何使用 ADO 连接到 Access 数据库并执行查询操作:

  
  1.    #include <stdio.h>
  2.    #include <windows.h>
  3.    #include <ole2.h>
  4.    #include <oledb.h>
  5.    #include <msdasc.h>

  6.    int main() {
  7.        HRESULT hr;
  8.        IDBInitialize *pIDBInitialize = NULL;
  9.        IDataInitialize *pIDataInitialize = NULL;
  10.        IDBCreateSession *pIDBCreateSession = NULL;
  11.        ICommandText *pICommandText = NULL;
  12.        IRowset *pIRowset = NULL;
  13.        HROW *pHRow = NULL;
  14.        HROW hRow = NULL;
  15.        DBROWCOUNT cRowsObtained = 0;

  16.        // 初始化 COM 库
  17.        CoInitialize(NULL);

  18.        // 创建数据源对象
  19.        hr = CoCreateInstance(&CLSID_MSDAINITIALIZE, NULL, CLSCTX_INPROC_SERVER, &IID_IDataInitialize, (void**)&pIDataInitialize);
  20.        if (FAILED(hr)) {
  21.            printf("Failed to create data source object.\
  22. ");
  23.            goto cleanup;
  24.        }

  25.        // 创建连接字符串
  26.        WCHAR wszConnectString[] = L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\\\path\\\\to\\\\your\\\\database.mdb;";

  27.        // 获取数据源接口
  28.        hr = pIDataInitialize->lpVtbl->GetDataSource(pIDataInitialize, NULL, CLSCTX_INPROC_SERVER, wszConnectString, &IID_IDBInitialize, (IUnknown**)&pIDBInitialize);
  29.        if (FAILED(hr)) {
  30.            printf("Failed to get data source interface.\
  31. ");
  32.            goto cleanup;
  33.        }

  34.        // 打开数据库连接
  35.        hr = pIDBInitialize->lpVtbl->Initialize(pIDBInitialize);
  36.        if (FAILED(hr)) {
  37.            printf("Failed to open database connection.\
  38. ");
  39.            goto cleanup;
  40.        }

  41.        // 创建会话
  42.        hr = pIDBInitialize->lpVtbl->QueryInterface(pIDBInitialize, &IID_IDBCreateSession, (void**)&pIDBCreateSession);
  43.        if (FAILED(hr)) {
  44.            printf("Failed to create session.\
  45. ");
  46.            goto cleanup;
  47.        }

  48.        // 创建命令对象
  49.        hr = pIDBCreateSession->lpVtbl->CreateSession(pIDBCreateSession, NULL, &IID_ICommandText, (IUnknown**)&pICommandText);
  50.        if (FAILED(hr)) {
  51.            printf("Failed to create command object.\
  52. ");
  53.            goto cleanup;
  54.        }

  55.        // 设置查询语句
  56.        WCHAR wszCommandText[] = L"SELECT * FROM your_table_name;";
  57.        hr = pICommandText->lpVtbl->SetCommandText(pICommandText, DBGUID_DBSQL, wszCommandText);
  58.        if (FAILED(hr)) {
  59.            printf("Failed to set command text.\
  60. ");
  61.            goto cleanup;
  62.        }

  63.        // 执行查询
  64.        hr = pICommandText->lpVtbl->Execute(pICommandText, NULL, &IID_IRowset, NULL, &cRowsObtained, (IUnknown**)&pIRowset);
  65.        if (FAILED(hr)) {
  66.            printf("Failed to execute query.\
  67. ");
  68.            goto cleanup;
  69.        }

  70.        // 处理查询结果
  71.        // ...

  72.    cleanup:
  73.        // 释放资源
  74.        if (pIRowset) pIRowset->lpVtbl->Release(pIRowset);
  75.        if (pICommandText) pICommandText->lpVtbl->Release(pICommandText);
  76.        if (pIDBCreateSession) pIDBCreateSession->lpVtbl->Release(pIDBCreateSession);
  77.        if (pIDBInitialize) pIDBInitialize->lpVtbl->Release(pIDBInitialize);
  78.        if (pIDataInitialize) pIDataInitialize->lpVtbl->Release(pIDataInitialize);

  79.        // 取消初始化 COM 库
  80.        CoUninitialize();

  81.        return 0;
  82.    }
  83.    
复制代码


   请注意,你需要将 C:\\\\path\\\\to\\\\your\\\\database.mdb 替换为你的 Access 数据库文件的实际路径,将 your_table_name 替换为你要查询的表名。

4. 编译和运行

   编译并运行你的 C 语言项目。如果一切正常,你应该能够连接到 Access 数据库并执行查询操作。

这个示例仅用于演示如何使用 C 语言和 ADO 连接到 Access 数据库。在实际项目中,你可能需要根据你的需求对代码进行修改和扩展。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-3 18:21:13 | 显示全部楼层
**实现 C 语言以 ADO 方式读取 Access 数据库**

要使用 C 语言以 ADO 方式读取 Access 数据库,您需要使用 COM 技术。以下是一个简单的示例,展示了如何使用 C 语言和 ADO 连接到 Access 数据库并执行查询。

**1. 安装并配置**

首先,确保您已经安装了 Microsoft Data Access Components (MDAC)。这是一个包含用于访问数据库的组件的软件包。您可以从 [Microsoft 官方网站](https://www.microsoft.com/en-us/download/details.aspx?id=5793) 下载 MDAC。

**2. 初始化 COM**

在使用 ADO 之前,需要初始化 COM 库。使用 `CoInitialize` 函数进行初始化:


  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <initguid.h>
  4. #include <oledb.h>
  5. #include <oledberr.h>

  6. int main() {
  7.     HRESULT hr = CoInitialize(NULL);
  8.     if (FAILED(hr)) {
  9.         printf("COM 初始化失败: %08X\n", hr);
  10.         return 1;
  11.     }

  12.     // ... 后续代码

  13.     CoUninitialize();
  14.     return 0;
  15. }
复制代码



**3. 创建 ADO 连接**

接下来,创建一个 ADO 连接对象。使用 `CoCreateInstance` 函数创建 `ADODB.Connection` 对象:


  1. IDispatch *pConn = NULL;
  2. hr = CoCreateInstance(&CLSID_ADODBConnection, NULL, CLSCTX_INPROC_SERVER, &IID_IDispatch, (void **)&pConn);
  3. if (FAILED(hr)) {
  4.     printf("创建 ADODB.Connection 对象失败: %08X\n", hr);
  5.     CoUninitialize();
  6.     return 1;
  7. }
复制代码


**4. 打开数据库连接**

使用 `ADODB.Connection` 对象的 `Open` 方法打开 Access 数据库连接。需要提供一个连接字符串,包含数据库文件的路径和其他连接参数:


  1. BSTR connStr = SysAllocString(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\path\\to\\your\\database.mdb;");
  2. DISPID dispid;
  3. OLECHAR *methodName = L"Open";
  4. hr = GetIDsOfNames(pConn, &methodName, 1, &dispid);
  5. if (SUCCEEDED(hr)) {
  6.     DISPPARAMS params = { NULL, NULL, 0, 0 };
  7.     params.rgvarg = (VARIANTARG *)CoTaskMemAlloc(sizeof(VARIANTARG));
  8.     params.cArgs = 1;
  9.     VariantInit(&params.rgvarg[0]);
  10.     params.rgvarg[0].vt = VT_BSTR;
  11.     params.rgvarg[0].bstrVal = connStr;
  12.     hr = Invoke(pConn, dispid, &params, NULL);
  13.     if (FAILED(hr)) {
  14.         printf("打开数据库连接失败: %08X\n", hr);
  15.     }
  16.     VariantClear(&params.rgvarg[0]);
  17.     CoTaskMemFree(params.rgvarg);
  18. } else {
  19.     printf("获取 Open 方法失败: %08X\n", hr);
  20. }
  21. SysFreeString(connStr);
复制代码



**5. 执行查询**

现在可以使用 ADO 连接对象执行查询。创建一个 `ADODB.Recordset` 对象,然后使用 `Execute` 方法执行查询:


  1. // ... 创建 ADODB.Recordset 对象

  2. BSTR sql = SysAllocString(L"SELECT * FROM your_table;");
  3. hr = GetIDsOfNames(pConn, &methodName, 1, &dispid);
  4. if (SUCCEEDED(hr)) {
  5.     DISPPARAMS params = { NULL, NULL, 0, 0 };
  6.     params.rgvarg = (VARIANTARG *)CoTaskMemAlloc(sizeof(VARIANTARG) * 2);
  7.     params.cArgs = 2;
  8.     VariantInit(&params.rgvarg[0]);
  9.     VariantInit(&params.rgvarg[1]);
  10.     params.rgvarg[0].vt = VT_DISPATCH | VT_BYREF;
  11.     params.rgvarg[0].pdispVal = &pRecordset;
  12.     params.rgvarg[1].vt = VT_BSTR;
  13.     params.rgvarg[1].bstrVal = sql;
  14.     hr = Invoke(pConn, dispid, &params, NULL);
  15.     if (FAILED(hr)) {
  16.         printf("执行查询失败: %08X\n", hr);
  17.     }
  18.     VariantClear(&params.rgvarg[0]);
  19.     VariantClear(&params.rgvarg[1]);
  20.     CoTaskMemFree(params.rgvarg);
  21. } else {
  22.     printf("获取 Execute 方法失败: %08X\n", hr);
  23. }
  24. SysFreeString(sql);

  25. // ... 处理查询结果

  26. // ... 释放资源
复制代码



这个示例展示了如何使用 C 语言和 ADO 连接到 Access 数据库并执行查询。您可以根据需要修改代码以适应您的具体需求。**实现 C 语言以 ADO 方式读取 Access 数据库**

要使用 C 语言以 ADO 方式读取 Access 数据库,您需要使用 COM 技术。以下是一个简单的示例,展示了如何使用 C 语言和 ADO 连接到 Access 数据库并执行查询。

**1. 安装并配置**

首先,确保您已经安装了 Microsoft Data Access Components (MDAC)。这是一个包含用于访问数据库的组件的软件包。您可以从 [Microsoft 官方网站](https://www.microsoft.com/en-us/download/details.aspx?id=5793) 下载 MDAC。

**2. 初始化 COM**

在使用 ADO 之前,需要初始化 COM 库。使用 `CoInitialize` 函数进行初始化:


  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <initguid.h>
  4. #include <oledb.h>
  5. #include <oledberr.h>

  6. int main() {
  7.     HRESULT hr = CoInitialize(NULL);
  8.     if (FAILED(hr)) {
  9.         printf("COM 初始化失败: %08X\n", hr);
  10.         return 1;
  11.     }

  12.     // ... 后续代码

  13.     CoUninitialize();
  14.     return 0;
  15. }
  16. ```

  17. **3. 创建 ADO 连接**

  18. 接下来,创建一个 ADO 连接对象。使用 `CoCreateInstance` 函数创建 `ADODB.Connection` 对象:

  19. ```c
  20. IDispatch *pConn = NULL;
  21. hr = CoCreateInstance(&CLSID_ADODBConnection, NULL, CLSCTX_INPROC_SERVER, &IID_IDispatch, (void **)&pConn);
  22. if (FAILED(hr)) {
  23.     printf("创建 ADODB.Connection 对象失败: %08X\n", hr);
  24.     CoUninitialize();
  25.     return 1;
  26. }
复制代码



**4. 打开数据库连接**

使用 `ADODB.Connection` 对象的 `Open` 方法打开 Access 数据库连接。需要提供一个连接字符串,包含数据库文件的路径和其他连接参数:


  1. BSTR connStr = SysAllocString(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\path\\to\\your\\database.mdb;");
  2. DISPID dispid;
  3. OLECHAR *methodName = L"Open";
  4. hr = GetIDsOfNames(pConn, &methodName, 1, &dispid);
  5. if (SUCCEEDED(hr)) {
  6.     DISPPARAMS params = { NULL, NULL, 0, 0 };
  7.     params.rgvarg = (VARIANTARG *)CoTaskMemAlloc(sizeof(VARIANTARG));
  8.     params.cArgs = 1;
  9.     VariantInit(&params.rgvarg[0]);
  10.     params.rgvarg[0].vt = VT_BSTR;
  11.     params.rgvarg[0].bstrVal = connStr;
  12.     hr = Invoke(pConn, dispid, &params, NULL);
  13.     if (FAILED(hr)) {
  14.         printf("打开数据库连接失败: %08X\n", hr);
  15.     }
  16.     VariantClear(&params.rgvarg[0]);
  17.     CoTaskMemFree(params.rgvarg);
  18. } else {
  19.     printf("获取 Open 方法失败: %08X\n", hr);
  20. }
  21. SysFreeString(connStr);
复制代码

**5. 执行查询**

现在可以使用 ADO 连接对象执行查询。创建一个 `ADODB.Recordset` 对象,然后使用 `Execute` 方法执行查询:


  1. // ... 创建 ADODB.Recordset 对象

  2. BSTR sql = SysAllocString(L"SELECT * FROM your_table;");
  3. hr = GetIDsOfNames(pConn, &methodName, 1, &dispid);
  4. if (SUCCEEDED(hr)) {
  5.     DISPPARAMS params = { NULL, NULL, 0, 0 };
  6.     params.rgvarg = (VARIANTARG *)CoTaskMemAlloc(sizeof(VARIANTARG) * 2);
  7.     params.cArgs = 2;
  8.     VariantInit(&params.rgvarg[0]);
  9.     VariantInit(&params.rgvarg[1]);
  10.     params.rgvarg[0].vt = VT_DISPATCH | VT_BYREF;
  11.     params.rgvarg[0].pdispVal = &pRecordset;
  12.     params.rgvarg[1].vt = VT_BSTR;
  13.     params.rgvarg[1].bstrVal = sql;
  14.     hr = Invoke(pConn, dispid, &params, NULL);
  15.     if (FAILED(hr)) {
  16.         printf("执行查询失败: %08X\n", hr);
  17.     }
  18.     VariantClear(&params.rgvarg[0]);
  19.     VariantClear(&params.rgvarg[1]);
  20.     CoTaskMemFree(params.rgvarg);
  21. } else {
  22.     printf("获取 Execute 方法失败: %08X\n", hr);
  23. }
  24. SysFreeString(sql);

  25. // ... 处理查询结果

  26. // ... 释放资源
复制代码

这个示例展示了如何使用 C 语言和 ADO 连接到 Access 数据库并执行查询。您可以根据需要修改代码以适应您的具体需求。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-3 18:39:44 | 显示全部楼层
感谢2楼、3楼、4楼的鱼油帮助。编译上述代码时,出现大量的错误信息,问题没有解决。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 05:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表