指定的初始化字符串不符合ole db规定”错误的真相

摘自于:http://bbs.jcwcn.com/thread-99351-1-1.html

我发现我一直都错了,前一段时间我发现了这个问题,一直忘记上来给大家说一声,在此检讨一下!

大家都知道串这样写的时候

代码:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("../jcwcn.mdb")

后面的数据库文件路径是相对路径,可以直接移植到服务器空间里。但是我们在这样写串的时候DW会报“不符合OLE DB的规定”的错误。这是为什么呢,难道是软件开发者连着最基本的功能都搞不定?我也疑问了很长一段时间。后来我无意中发现了。原来是因为我们没有把本地驱动程序/服务器上的驱动程序和两种写串的方式对应起来

其实正确的做法应该如下:

代码:
"Driver={Microsoft access Driver (*.mdb)};dbq=E:/www/asp/DW/jcwcn.mdb"

这样的串写法要选择使用本地计算机上的驱动

代码:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("../jcwcn.mdb")

这样写的串,可直接移植到服务器上,这个时候我们要选择“使用服务器上的驱动程序”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用OLE DB连接和操作SQL Server Compact 3.5数据库的VC++代码示例: ```cpp #include <windows.h> #include <sqloledb.h> #include <iostream> #include <string> using namespace std; int main() { // 初始化 COM 库 CoInitialize(NULL); // 定义连接字符串(替换为自己的数据库路径和名称) wstring connStr = L"Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=C:\\MyData.sdf;Persist Security Info=False;"; // 创建连接对象 IDBInitialize* pConnection = NULL; HRESULT hr = CoCreateInstance(CLSID_SQLSERVERCE, NULL, CLSCTX_INPROC_SERVER, IID_IDBInitialize, (void**)&pConnection); if (FAILED(hr)) { cout << "连接数据库失败!" << endl; return 0; } // 初始化连接对象 hr = pConnection->Initialize(); if (FAILED(hr)) { cout << "初始化连接对象失败!" << endl; return 0; } // 定义命令字符串 wstring sqlCmd = L"SELECT * FROM MyTable"; // 创建命令对象 ICommandText* pCommand = NULL; hr = pConnection->QueryInterface(IID_ICommandText, (void**)&pCommand); if (FAILED(hr)) { cout << "创建命令对象失败!" << endl; return 0; } // 设置命令文本 hr = pCommand->SetCommandText(DBGUID_DBSQL, sqlCmd.c_str()); if (FAILED(hr)) { cout << "设置命令文本失败!" << endl; return 0; } // 执行命令 IRowset* pRowset = NULL; hr = pCommand->Execute(NULL, IID_IRowset, NULL, NULL, (IUnknown**)&pRowset); if (FAILED(hr)) { cout << "执行命令失败!" << endl; return 0; } // 获取结果集 HROW hRow = NULL; DBCOUNTITEM count = 0; while (pRowset->GetNextRows(NULL, 0, 1, &count, &hRow) == S_OK) { // 获取行数据 DBBINDING binding; DWORD dwBindingSize = sizeof(binding); pRowset->GetBindings(0, &binding, &dwBindingSize); BYTE* pData = new BYTE[binding.cbMaxLen]; pRowset->GetData(hRow, binding.obValue, pData, binding.cbMaxLen); // 处理行数据 // ... // 释放内存 delete[] pData; pData = NULL; // 释放行句柄 pRowset->ReleaseRows(1, &hRow, NULL, NULL, NULL); hRow = NULL; } // 释放结果集 pRowset->Release(); pRowset = NULL; // 释放命令对象 pCommand->Release(); pCommand = NULL; // 释放连接对象 pConnection->Uninitialize(); pConnection->Release(); pConnection = NULL; // 释放 COM 库 CoUninitialize(); return 0; } ``` 注意,要使用此代码,需要在项目属性的“链接器”->“输入”->“附加依赖项”中添加以下库文件: ``` oledb.lib sqlceoledb35.lib ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值