在网上传闻SQLDMO是个好东西,当时没有注意这个传闻是什么时候了,后来才在微软的官网上看见,从SQL Server2008开始就不用SQLDMO了,取而代之的是SMO。无奈了,还写了个Helper。感觉DMO用起来比用SQLCMD少输些命令,而且如果用ADO.NET调用存储过程的话,好像还比DMO方便。

这个SQLDMO绝不是像别的dll那样直接添加引用的,它是个COM组件,要注册了才能使用,这说明了,凡是要跑带这个组件的程序,都要先注册一下组件。

在网上下一个SQLDOM的压缩包,解压后

第一步:首先将msvcr71.dll, SQLDMO.DLL, Resources\2052\sqldmo.rll,Resources\1033\sqldmo.rll 拷贝到C:\Program Files\Microsoft SQL Server\80\Tools\Binn目录。
下载SQLDMO文件
第二步:打开开始,在运行中输入 regsvr32 "C:\Program Files\Microsoft SQL Server\80\Tools\Binn\sqldmo.dll" 注册sqldmo.dll。

好了,是时候粘贴代码了

     class SQLDMOHelper
{ //增加
public static void CreateDB(string dbName, string hostName, string instanceName, string username, string password)
{
SQLServer server = null;
Application app=null;
try
{
server = new SQLServer();
app = new ApplicationClass();
ConfigServer(server, hostName, instanceName, username, password);
string dbPath = server.Registry.SQLDataRoot + @"\DATA\" + dbName; foreach (Database db in server.Databases)
if (db.Name == dbName) return; Database database = new DatabaseClass();
DBFile file = new DBFileClass();
LogFile log = new LogFileClass(); database.Name = dbName;
file.Name = dbName + "file";
file.PhysicalName = dbPath + "_Data.mdf";
file.PrimaryFile = true;
file.FileGrowthType = ;
file.FileGrowth = ;
database.FileGroups.Item("primary").DBFiles.Add(file);
log.Name = dbName + "log";
log.PhysicalName = dbPath + "_Log.ldf";
database.TransactionLog.LogFiles.Add(log);
server.Databases.Add(database); }
catch
{
throw;
}
finally
{
if (server != null)
{
server.DisConnect();
server.Close();
}
if (app != null)
app.Quit();
} } public static void CreateDB(string dbName, string hostName, string instanceName)
{
CreateDB(dbName, hostName, instanceName, "", "");
} //删除 public static void DeleteDB(string dbName, string hostName, string instanceName, string username, string password)
{
SQLServer server=null;
try
{
server = new SQLServerClass();
ConfigServer(server, hostName, instanceName, username, password);
Database database = server.Databases.Item(dbName, null) as Database; QueryResults queryRestlts = server.EnumProcesses(-);
int iColPIDNum = -;
int iColDbName = -;
for (int i = ; i <= queryRestlts.Columns; i++)
{
string strName = queryRestlts.get_ColumnName(i);
if (strName.ToUpper().Trim() == "SPID")
{
iColPIDNum = i;
}
else if (strName.ToUpper().Trim() == "DBNAME")
{
iColDbName = i;
}
if (iColPIDNum != - && iColDbName != -)
break;
} for (int i = ; i <= queryRestlts.Rows; i++)
{
int lPID = queryRestlts.GetColumnLong(i, iColPIDNum);
string strDBName = queryRestlts.GetColumnString(i, iColDbName);
if (strDBName.ToUpper() == dbName)
server.KillProcess(lPID);
} database.Remove();
}
catch
{
throw;
}
finally
{
if (server != null)
{
server.DisConnect();
server.Close();
}
} } public static void DeleteDB(string dbName, string hostName, string instanceName)
{
DeleteDB(dbName, hostName, instanceName, "", "");
} //附加
public static void AttachDB(string dbName,string dbFileName,string hostName,string instanceName,string username,string password)
{
SQLServer server = null;
try
{
server = new SQLServer();
ConfigServer(server, hostName, instanceName, username, password);
server.AttachDBWithSingleFile(dbName, dbFileName);
}
catch
{
throw;
}
finally
{
if (server != null)
{
server.DisConnect();
server.Close();
}
}
} public static void AttachDB(string dbName, string dbFileName, string hostName, string instanceName)
{
AttachDB(dbName, dbFileName, hostName, instanceName, "", "");
} //分离
public static void DetachDB(string dbName, string dbFileName, string hostName, string instanceName, string username, string password)
{
SQLServer server = null;
try
{
server = new SQLServer();
ConfigServer(server, hostName, instanceName, username, password);
server.DetachDB(dbName);
}
catch
{
throw;
}
finally
{
if (server != null)
{
server.DisConnect();
server.Close();
}
}
} public static void DetachDB(string dbName, string dbFileName, string hostName, string instanceName)
{
DetachDB(dbName, dbFileName, hostName, instanceName, "", "");
} //脱机
//联机 /// <summary>
/// 数据库全备份 失败则会抛异常
/// </summary>
public static void BackupDB(string fileName, string dbName, string hostName, string instanceName, string username, string password)
{
SQLServer server=null;
Backup backup=null;
try
{
server = new SQLServer();
backup = new Backup(); ConfigServer(server, hostName, instanceName, username, password);
backup.Action = SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
backup.Database = dbName;
backup.BackupSetName = dbName;
backup.BackupSetDescription = "数据库备份";
backup.Files = fileName;
backup.Initialize = true;
backup.SQLBackup(server);
}
catch
{
throw;
}
finally
{
if (server != null)
{
server.DisConnect();
server.Close();
}
}
} public static void BackupDB(string fileName, string dbName, string hostName, string instanceName)
{
BackupDB(fileName, dbName, hostName, instanceName,"","");
} /// <summary>
/// 还原数据库 失败会抛异常
/// </summary>
public static void RestoreDB(string fileName, string dbName, string dbFileName, string hostName, string instanceName, string username, string password)
{
SQLServer server = null;
Restore restore = null;
try
{
server = new SQLServerClass();
restore = new RestoreClass();
ConfigServer(server, hostName, instanceName, username, password); QueryResults queryRestlts = server.EnumProcesses(-);
int iColPIDNum = -;
int iColDbName = -;
for (int i = ; i <= queryRestlts.Columns; i++)
{
string strName = queryRestlts.get_ColumnName(i);
if (strName.ToUpper().Trim() == "SPID")
{
iColPIDNum = i;
}
else if (strName.ToUpper().Trim() == "DBNAME")
{
iColDbName = i;
}
if (iColPIDNum != - && iColDbName != -)
break;
} for (int i = ; i <= queryRestlts.Rows; i++)
{
int lPID = queryRestlts.GetColumnLong(i, iColPIDNum);
string strDBName = queryRestlts.GetColumnString(i, iColDbName);
if (strDBName.ToUpper() == dbName)
server.KillProcess(lPID);
} restore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
restore.Database = dbName;
restore.Files = fileName;
restore.FileNumber = ;
restore.ReplaceDatabase = true;
restore.SQLRestore(server);
}
catch
{
throw;
}
finally
{
if (server != null)
{
server.DisConnect();
server.Close();
}
}
} public static void RestoreDB(string fileName, string dbName, string dbFileName, string hostName, string instanceName)
{
RestoreDB(fileName, dbName, dbFileName, hostName,instanceName,"","");
} private static void ConfigServer(SQLServer server, string hostName, string instanceName, string userName = "", string password = "")
{
if (string.IsNullOrEmpty(userName) && string.IsNullOrEmpty(password))
server.LoginSecure = true;
else
{
server.Login = userName;
server.Password = password;
}
server.Connect(hostName + "\\" + instanceName);
}
}

SQLDMOHelper的更多相关文章

随机推荐

  1. hive中同列多行数据组合的方法以及array to string要点(行转列)

    1. 同列多行数据组合成一个字段cell的方法, top N 问题的hive方案 如下: hive 列转行 to json与to array list set等复杂结构,hive topN的提取的窗口 ...

  2. Linux所有者和组

    组 添加组 groupadd 组名 查看所有组 cat  /etc/group 添加成员useradd -g 组名 用户名 查看成员 cat /etc/passwd 查看用户权限 ls -l d rw ...

  3. 【jquery】基于 jquery 实现 ie 浏览器兼容 placeholder 效果

    placeholder 是 html5 新增加的属性,主要提供一种提示(hint),用于描述输入域所期待的值.该提示会在输入字段为空时显示,并会在字段获得焦点时消失.placeholder 属性适用于 ...

  4. 命令行上的narrowing(随着输入逐步减少备选项)工具

    前面在介绍zsh的时候,说过它的补全用来起比bash的Tab补全方便多了,在有多个备选项是你只要用光标键来挑选就是了,而不是全列出来提示你再多输入几个字符.而Emacs的anything / helm ...

  5. 【原】 COCOS2D—LUA 获取剪贴板内容

    android下: local luaj = require ("framework.luaj")   local ok,ret  = luaj.callStaticMethod( ...

  6. (笔记)Linux内核学习(八)之定时器和时间管理

    一 内核中的时间观念 内核在硬件的帮助下计算和管理时间.硬件为内核提供一个系统定时器用以计算流逝的时间.系 统定时器以某种频率自行触发,产生时钟中断,进入内核时钟中断处理程序中进行处理. 墙上时间和系 ...

  7. Unitils集成DBUnit、Spring-单元测试

    Unitils集成DBUnit.Spring-单元测试 1.maven-pom文件中引入相关jar包 <!-- Unitils -dbunit.Spring --> <depende ...

  8. 用对 gitignore

    使用 git 做代码管理工具时,设置 gitignore 是必不可少的流程,一些系统或者 IDE 会在目录下生成与项目不相关的文件,而这些文件我们不期望被提交到仓库之中.理解 gitignore 的 ...

  9. Mac终端常用命令收集

    删除非空目录 rm -rf 目录名字 -r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 终端修改hosts文件 sudo vi /etc/hosts 切换到su ...

  10. C++ CompletionPort(完成端口)示例

    ECHO客户端 #include <WINSOCK2.H> #include <stdio.h> #define SERVER_ADDRESS "127.0.0.1& ...