c++使用ado连接 sqlserver使用注意点
来源:互联网 发布:linux 退出文件编辑 编辑:程序博客网 时间:2024/06/07 07:23
c++使用ado连接 sqlserver使用注意点
1.创建失败问题
// 创建Connection对象
HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection));
if(FAILED(hr))
{
PAG_ERROR("_ConnectionPtr对象指针实例化失败 请确保路径[%s] 版本为:%s 存在msado15.dll", SQLDATAHPLUG_ADO_PATH,
SQLDATAHPLUG_ADO_VER);
解决方法:
利用其它低版本的msado进行编译,注意指定文件夹
或者用其他可以用的电脑进行开发
2.反初始化异常:退出数据库错误对象关闭时,不允许操作问题
解决方法:State !=adStateClosed
if (m_pRecordset != NULL)
{
if (m_pRecordset->State !=adStateClosed)
{
m_pRecordset->Close();
}
}
if (m_pConnection != NULL)
{
if(m_pConnection->State!=adStateClosed)
{
m_pConnection->Close();
}
}
3.结果总数
rec->RecordCount 总是为0或者-1
解决方法两种:
1)要先把记录走一遍,再调用
用rec->RecordCount前,先调用movefirst()和movelast
2)
pRecordSet.CreateInstance(_uuidof(Recordset));
pRecordSet->CursorType=adOpenStatic;//静态游标
4、利用序号得到字段值方法抛异常---在对应所需名称或序数的集合中,未找到项目
for(int iField=0; iField< uiField; iField++)
_variant_t Index = iField;
tring StrFieValue= (char *)(_bstr_t)m_pRecordset->GetFields()->GetItem(Index)->GetValue();//取得值
解决方法:
1)静态打开
// hr = m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
// 取得表中的记录 利用字段的序号获取值
hr = m_pRecordset->Open(bstrSQL ,_variant_t((IDispatch *)m_pConnection,true), adOpenStatic,adLockOptimistic,adCmdText);
//int 改为long
for(long iField=0; iField< uiField; iField++)
_variant_t Index = iField;
5、
value指向一堆乱码...
_variant_t转换为char *:
错误方法:
_variant_t vValue; .char * value=(LPSTR)(LPCSTR)_bstr_t(vValue)
value指向一堆乱码...
原因:不能用char *直接指向(LPSTR)(LPCSTR)_bstr_t( _variant_t ),因为这样转换之后实际上是一个string,而非一个char *
正确方法:
进行转换时,只能用strcpy(),将LPSTR指向的字符复制到char * 所指向的内存中
6.反初始化:
CoInitialize(NULL);
CLSID clsid;
CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
CComPtr<IGetRes> pGetRes;//智能指针
pGetRes.CoCreateInstance(clsid);
pGetRes->Hello();
pGetRes.Release();//小心哦!!请看最后的“注意”
CoUninitialize();
注意:
问题在与,我们的智能指针pGetRes生命周期的结束是在
CoUninitialize()之后,CoInitialize所开的套间在CoUninitialize()后已经被
关闭,而pGetRes此时发生析构,导致了程序的崩溃,解决这个问题的另一个方法是
CoInitialize(NULL);
CLSID clsid;
CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
{
CComPtr<IGetRes> pGetRes;//智能指针
pGetRes.CoCreateInstance(clsid);
pGetRes->Hello();
}
CoUninitialize();
- c++使用ado连接 sqlserver使用注意点
- vc 使用ADO连接 sqlserver
- C++使用ADO连接SQLSERVER
- MFC使用ADO连接SqlServer
- MFC使用ado连接SQLserver
- 使用ADO.NET访问SQLSERVER注意连接池的大小设定
- 使用ADO.NET访问SQLSERVER注意连接池的大小设定收藏
- VC使用ADO连接SQLServer数据库
- VC使用ADO连接SQLServer数据库
- 详解MFC使用ADO连接SQLServer数据库
- MFC使用ADO连接SQLServer数据库
- MFC使用ADO连接SQLServer数据库
- C语言使用注意点
- JConsole连接Tomcat使用注意点
- 连接脚本相关使用注意点
- VC使用ADO连接SQLServer数据库(精简实用版)
- SQLServer使用注意规范
- SQLServer使用注意规范
- html文件替换其中的href的内容
- 集成开发环境IAR.Embedded.Workbench.for.ARM.V7.40
- 报工提示错误:“没有内部作业价格可被确认”的解决方法
- UI_KVC赋值
- Android微信分享图片大于32k进行压缩
- c++使用ado连接 sqlserver使用注意点
- HDL.Companion.v2.8.R1.for.Windows & linux64 编程开发软件
- Segmentation Fault in Linux 原因与避免
- Mac 终端命令大全
- Synopsys.Fpga.Synthesis.vJ-2015.03.Linux&windows FPGA实现和调试环境
- android 动画总结笔记 一
- B树与B+树
- 从Handler+Message+Looper源码带你分析Android系统的消息处理机制
- Spark streaming&storm流计算的相关对比