使用SQLDMO控制SQL Server

微软为外部程序的MS SQL Server服务访问提供了功能强大的COM接口,通过这些接口,可以不费吹灰之力就可以方便的访问SQL的服务。

第一步:在MS SQL Server的安装目录下面找到在sqldmo.rll文件,然后

#import "sqldmo.rll" no_namespace

这样就生产了sqldmo.tlh和sqldmo.tli文件,里面包含了SQL的COM接口的定义和实现。

第二步:就是具体的实现了。

先来一个启动SQL Server服务

BOOL StartSQLServer()
{
//先初始化COM
if (FAILED(CoInitialize(NULL)))
{
AfxMessageBox("Com初始化错误!");
return FALSE;
}
//定义一个SQL Server的对象指针
_SQLServerPtr spSQLServer;
//标准方法,建立实例
if (FAILED(spSQLServer.CreateInstance(__uuidof(SQLServer))))
{
AfxMessageBox("无法建立SQL对象!");
return FALSE;
}
try
{
//这里设置连接SQL的一些参数
//简单。设置Login超时
spSQLServer->PutLoginTimeout(10);
//随便起个名字好啦,管不着我啦
spSQLServer->PutApplicationName("MyAppName");
spSQLServer->PutHostName("MyHostName");
//网络数据Packet的大小
spSQLServer->PutNetPacketSize(1024);
/*
该建立连接了,为什么呢??服务还没有启动啊?怎么连接呢?不是傻了吗?道理跟你慢慢跟你说啦:这是试探一下SQL Server是不是已经启动了,如果它已经启动,那么我们就不用再次启动了(再次启动也是错误:服务器的实例已经运行中),已经启动了,干吗还要我写代码启动它啊?所以,如果SQL Server如果没有启动(当然其他原因也会触发异常),下面的异常处理代码就会执行到,我们将在异常处理中执行启动:*/
CString strServer(”(Local)”);
/*连接启动的SQL 的服务器名(
这里是本地SQL Server 服务,记住将本地的SQL Server服务停掉,然后测试啊)*/
Cstring strUserName(“sa”);
//连接启动的用户名,也可以使用信任连接,不用提供用户名和密码,请参考MSDN
Cstring strPassword(””);
//就是密码啦 spSQLServer->
Connect(_variant_t(strServer),_variant_t(strUserName),_variant_t());
}
catch(_com_error pCE)
{
//连接错误啦,是服务器没有启动吧
try
{
//真正启动SQL Server的代码在这里
spSQLServer->Start(FALSE,_variant_t(strServer),
_variant_t(strUserName),_variant_t(strPassword)); }
catch(_com_error pCE)
{
//这次的异常处理倒没有执行什么操作啊,随便处理一下,返回一个错误信息啦。
AfxMessageBox(pCE.Description());
spSQLServer.Release();
return FALSE;
}
}
//
接下来是释放资源啦,try catch是不是用成习惯了,反正是没有错的,多用一下也好啦。try
{
spSQLServer.Release();
spSQLServer.Release();
}
catch(_com_error pCE)
{
AfxMessageBox(pCE.Description());
return FALSE;
}
//释放COM
CoUninitialize();
return TRUE;
}


通过#import "sqldmo.rll"还能获得其他的很多接口,比如Attach数据库、FullTextService、获得设置SQL Server服务器的属性等等,当然相对应的停止SQL服务我就不用说了吧。

时间: 2024-08-03 01:21:56

使用SQLDMO控制SQL Server的相关文章

使用SQLDMO从SQL Server中获取信息

server 提要:ms sql server提供了一个非常方便的COM组件"SQLDMO"来帮助我们获取和管理SQL Server.在这里提供一些想法和实现.系统要求:windows2000servervs.net rc3sql server 2000正文:1.在.NET中使用sqldmo.dllpath :>tlbimp sqldmo.dll /out : rc3sqldmo.dll创建一个新的C#项目(winform, library....),添加引用,选择Browse,

SQL Server联机丛书:存储过程及其创建

server|创建|存储过程  存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能.存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数.返回单个或多个结果集以及返回值. 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 可以在单个存储

SQL Server的有效安装

server     微软总是试图使它的软件安装尽可能地简单顺畅,SQL Server 2000的安装也不例外.你从安装光盘的x86 etup文件夹启动setupsql.exe.在安装对话框中填入一些细节后,几分钟内,安装将在没有用户介入的情况下继续执行.你甚至可以成功的安装SQL Server 2000而不用明白那些选择意味着什么--只需在大多数安装对话框中点击"下一步".然而,我强烈建议你不要如此轻率地对待安装:留意每一个选项并且确保你完全理解你所作的每个选择的影响.一些低劣的决定

SQL SERVER的内存会不断增加,问题分析

server|问题 SQL SERVER的内存会不断增加 当 SQL Server 数据库引擎在 Microsoft Windows NT 或 Windows 2000 上运行时,其默认内存管理行为并不是获取特定的内存量,而是在不产生多余换页 I/O 的情况下获取尽可能多的内存.为此,数据库引擎获取尽可能多的可用内存,同时保留足够的可用内存以防操作系统交换内存. SQL Server 实例在启动时通常获取 8 到 12 MB 的内存以完成初始化过程.当实例完成初始化后,就不会再获取更多的内存,直

SQL Server中的CheckPoint

前面说到Recovery Interval可以控制SQL Server在内存中保留多少被修改的数据.其实我们有一个问题没有讲. 那就是内存中被修改的数据写回到磁盘后,也就意味着磁盘中的数据版本和日志中的数据操作已经同步了.当然也就意味着如果这个时候系统崩溃了,SQL Server就不需要再恢复了. 不过如果真的这个时候崩溃了,那么SQL Server怎么知道这些日志操作的数据已经写到磁盘了呢,所以SQL Server还有一个概念. 这个概念就是CheckPoint. 当SQL Server将一些

详细介绍优化SQL Server 2000的设置

SQL Server已经为了优化自己的性能而进行了良好的配置,比今天市场其他的关系型数据库都要好得多.然而,你仍然有几项设置需要进行修改,以便你的数据库每分钟可以处理更多的事务(TPM).本篇文章的目的就是讨论这些设置.我们忽略那些可以通过硬件配置或者表或者索引设计提高的性能,因为这些内容在本篇文章范围之外. 破碎页面检测 在我们开始讨论服务器配置开关之前,让我们快速浏览一下你的模型数据库--或者说用作构建新的数据库的基础的模板.默认情况下,你可以在数据库中创建存储过程.函数等类似的东西,随后他

SQL Server 2000集群服务器优缺点

由二台或更多物理上独立的服务器共同组成的"虚拟"服务器称之为集群服务器.一项称做MicroSoft集群服务(MSCS)的微软服务可对集群服务器进行管理.一个SQL Server集群是由二台或更多运行SQL Server的服务器(节点)组成的虚拟服务器.如果集群中的一个节点发生故障,集群中的另一个节点就承担这个故障节点的责任. 认为一个SQL Server集群能够给集群中的两个节点带来负载平衡,这是一种常见的误解.虽然这似乎很有用,但却是不正确的.这也意味着集束SQL Server不能真

SQL Server集群服务器的优缺点

由二台或更多物理上独立的服务器共同组成的"虚拟"服务器称之为集群服务器.一项称做MicroSoft集群服务(MSCS)的微软服务可对集群服务器进行管理.一个SQL Server集群是由二台或更多运行SQL Server的服务器(节点)组成的虚拟服务器.如果集群中的一个节点发生故障,集群中的另一个节点就承担这个故障节点的责任. 认为一个 SQL Server集群能够给集群中的两个节点带来负载平衡,这是一种常见的误解.虽然这似乎很有用,但却是不正确的.这也意味着集束SQL Server不能

SQL SERVER中各类触发器的完整语法及参数说明

语法: Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger) CREATE TRIGGER [ schema_name . ]trigger_name ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ] { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE