SQLServer2008远程连接
Vc++(MFC) 实现 SQL? Server 的远程连接( ADO 实现) ? ? 一 、 ADO 概 述 ? ???????ADO 是 Microsoft 为 最 新 和 最 强 大 的 数 据 访 问 范 例 ? OLE?DB? 而 设 计 的 , 是 一 个 便 于 使 用 的 应 用 程 序 层 接 口 OLE.DB? 提 供 者 访 问 和 操 作 数 据 库 服 务 器 中 的 数 据 。 ADO? 最 主 要 的 优 点 是 易 于 使 用 、速 度 快 、内 存 支 出 少 和 磁 最 少 的 网 络 流 量 , 并 且 在 前 端 和 数 据 源 之 间 使 用 最 少 的 层 数 , 所 有 这 些 都 是 为 了 提 供 轻 量 、 高 性 能 的 接 口 。 之 所 喻 , OLE? 自 动 化 接 口 。 ? 二 、 利 用 ADO 来 实 现 对 SQL?Server 的 远 程 连 接 ? 1 、 首 先 是 引 入 ADO 库 文 件 ?????? 使 用 ADO 前 必 须 在 你 的 工 程 中 的 stdafx.h 文 件 里 直 接 引 入 符 号 #import 引 入 A 如 下 内 容 : ? #include?<comdef.h>? #include?<icrsint.h>? #import?"C:program?filescommon?filessystemadomsado15.dll"?? ?????????no_namespace?rename("EOF",?"ADOEOF")????? 这 行 语 句 声 明 在 工 程 中 使 用 ADO ,但 不 使 用 ADO 的 名 字 改 名 为 "ADOEOF" 。 现 在 不 需 添 加 另 外 的 头 文 件 , 就 可 以 使 用 ADO 接 口 了 。 ? 2 、 初 始 化 OLE/COM 库 环 境 ???? 在 InitInstance() 函 数 下 面 初 始 化 OLE/COM 库 ? BOOL?******?::InitInstance ( ) ? {? ?????? ?// 下 面 是 需 要 添 加 的 代 码 : ? ???? ?if?(!AfxOleInit())// 初 始 化 OLE/COM 库 环 境 ????????? ???{? ????????AfxMessageBox("OLE 初 始 化 出 错 ! ");? ?????????return?FALSE;? ????} ? ??????................ ? }? 3 、 下 面 是 连 接 数 据 库 代 码 : ? 定 义 _ConnectionPtr 接 口 和 _RecordsetPtr 接 口 。 如 下 : ? _ConnectionPtr ?m_pConnection;?? ? _RecordsetPtr ?m_pRecordset;? 实 现 代 码 : ? HRESULT? hr;? try? {? ???hr?=?m_pConnection.CreateInstance("ADODB.Connection"); ? ???if?( SUCCEEDED(hr ))? ???{?? ????????????//connect?database? ???? ??? _bstr_t ? strConnect="Provider=SQLOLEDB.1;Initial?Catalog=“ 数 据 库 名 称 ”;Data?Source= 远 程 IP";? ??????????hr?=? m_pConnection->Open( strConnect," 用 户 名 "," 密 码 ", adModeUnknown );? ????AfxMessageBox(" 连 接 成 功 ");? ???}? ??? }? catch ? (_com_error?e )? {? ?? CString? errormessage;? ???errormessage.Format(" 连 接 数 据 库 失 败 ! rn 错 误 信 息 :%s",e.ErrorMessage()); ? ???AfxMessageBox(errormessage);? ???return?? }? 4 、 查 询 数 据 库 信 息 : ? 添 加 listctrl 控 件 , 并 定 义 为 m_list? ; 在 winfo 表 中 查 询 id , name , ip 信 息 。 ? 并 初 始 化 listctrl 控 件 各 列 值 : 代 码 如 下 : ? m_list.InsertColumn(0,"ID");? m_list.InsertColumn(1,"Name");? m_list.InsertColumn(1,"IP");? CRect?rect3;? m_list.GetClientRect(rect3);? m_list.SetColumnW idth(0,rect3.W idth()/3); ? m_list.SetColumnW idth(1,rect3.W idth()/3); ? m_list.SetColumnW idth(2,rect3.W idth()/3); ? 下 面 是 查 询 实 现 代 码 : ? int?intm;? try? {? ??? _variant_t ?RecordsAffected;?? ???m_pRecordset?=? m_pConnection->Execute (" SELECT ?id , name , ip? from ???winfo",&RecordsAffected,adC ???while(!m_pRecordset->ADOEOF)? ???{? ??? _variant_t ?ID,?Name,?IP;? ????ID=? m_pRecordset->GetCollect ("id");? ????Name= m_pRecordset->GetCollect ("name");? ????IP= m_pRecordset->GetCollect ("ip");? ????intm=m_list.InsertItem(0,(_bstr_t)ID); ? ????m_list.SetItem(intm,1,(_bstr_t)IP,NULL,0); ? ????m_list.SetItem(intm,2,(_bstr_t)Name,0);? ????m_pRecordset->MoveNext();? ???}? ???m_pRecordset->Close();? }? ???catch?(_com_error?e)? ???{? ????CString?errormessage;? ????errormessage.Format(" 查 询 失 败 ! rn 错 误 信 息 :%s",e.ErrorMessage()); ? ????AfxMessageBox(errormessage);? ???return?? ???}? 通 过 上 述 语 句 将 id? , name? , ip 信 息 显 示 在 listctr 控 件 中 。 ? 5 、 注 意 ? ? ??????? 由 于 COM 对 象 是 跨 平 台 的 , 它 使 用 了 一 种 通 用 的 方 法 来 处 理 各 种 类 型 的 数 据 , 因 此 CString? 类 和 COM 对 COM 对 象 和 C++ 类 型 的 数 据 。 _vatiant_t 和 _bstr_t 就 是 这 样 两 种 对 象 。 它 们 提 供 了 通 用 的 方 法 转 换 COM 对 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- SSB(SQLservice Service Broker) 入门实例介绍
- 修改SQLServer2008数据库文件名称(数据文件和日志文件)
- sql-server – [ADO.NET错误]:数据库’master’中的CREATE
- 用cmd命令行启动和关闭sqlserver2008服务
- 命令行下连接SQLServer小工具(脱裤必备)
- SQL SERVER 数据类型详解补充2
- 查看SQLSERVER的端口命令
- 【SqlServer】Microsoft SQL Server 2008技术内幕:T-SQL查询
- sql-server – sp_who2 BlkBy正在等待命令的休眠进程
- SQL Server 2012 getClob():不支持从varchar(nvarchar)到C