在网上传闻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. [CoreOS 转载] CoreOS实践指南(六):分布式数据存储Etcd(下)

    转载:http://www.csdn.net/article/2015-01-28/2823739/2 摘要:Etcd是CoreOS生态系统中处于连接各个节点通信和支撑集群服务协同运作的核心地位的模块 ...

  2. IT部门能力评估...

    IT运行成本和变化成本越来越高,IT部门是否上了一些对企业无价值的系统,是否充分利用了已有系统的价值? 随 着IT应用不断深入,庞大的企业IT系统日积月累,各种隐患渐渐显露.IT系统变得越来越复杂,运 ...

  3. R语言之中文分词:实例

    一.说明 网上提供的一个例子,做了修改与订正. 二.程序 #调入分词的库 library("rJava") library("Rwordseg") #调入绘制词 ...

  4. juniper 550M訪问自身公网IP回流内部IP

    拓扑图示意: 网关设备juniper 550M, untrust 区: 公网地址段22.22.22.22/29 trust区:      内部员工PC地址:172.16.4.x /24 trust区: ...

  5. TSPL学习笔记(4):数组相关练习

    最近研究函数式编程,都是haskell和scheme交互着看的,所以笔记中两种语言的内容都有,练习一般也都用两种语言分别实现. 本篇练习一些数组有关的问题,之所以与数组相关是因为在命令式编程中以下问题 ...

  6. UDP"打洞"原理

    1. NAT分类 根据Stun协议(RFC3489),NAT大致分为下面四类 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口 ...

  7. 新一代服务器性能测试工具Gatling

    新一代服务器性能测试工具Gatlinghttp://automationqa.com/forum.php?mod=viewthread&tid=2898&fromuid=2

  8. 在linux下配置静态IP

    在终端中输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0   开始编辑,填写ip地址.子网掩码.网关.DNS等.其中“红框内的信息”是必须得有的.   编 ...

  9. 并行编程多线程之Parallel

    1.简介 随着多核时代的到来,并行开发越来越展示出它的强大威力!使用并行程序,充分的利用系统资源,提高程序的性能.在.net 4.0中,微软给我们提供了一个新的命名空间:System.Threadin ...

  10. visual studio snippets风格

    snippet挺好用,但是不是我喜欢的那种风格,比如if是这样的 if () { XX } 而我比较习惯这种: if () { XX } 可以这么做: 工具(Tools)——代码段管理器(Code S ...