在网上传闻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. 关于SQLServer2008数据如何导入SQL2005的解决办法,高版本数据导入低版本中。

    最近需要把SqlServer2008 的数据库导入sqlserver2005 中.直接备份还原肯定不行.后来想到可以生成脚本执行sql语句,并选择数据可以一同进行执行. 点击右键--->任务-- ...

  2. 每日英语:A New Way to Learn Chinese

    Entrepreneur and author ShaoLan Hsueh thinks that English-speakers can start learning to read Chines ...

  3. Django 源码小剖: 初探中间件(middleware)

    因为考虑到文章的长度, 所以 BaseHandler 的展开被推迟了. 在 BaseHandler 中隐藏着中间件的信息, 较常见的 SessionMiddleware 就已经默认安装.  BaseH ...

  4. java生成解析xml的另外两种方法Xstream

    Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...

  5. LESS详解之函数(四)

    之前已经为大家介绍了一些LESS函数,大家应该对之前介绍的有所了解了.下面依旧为大家介绍LESS的函数,附加着一些小例子.希望这些有关LESS的函数能在大家编写LESS的时候有所帮助. saturat ...

  6. angularjs, nodejs, express, gulp, karma, jasmine 前端方案整合

    今年转向做前端开发,主要是做angularjs开发,期间接触了nodejs平台,从此一发不可收拾. npm丰富的插件库,express 开发框架, grunt, gulp构建工具,karma测试管理工 ...

  7. Python测试基础教程

    Python简明教程1-为什么 Pythonhttp://www.automationqa.com/forum.php?mod=viewthread&tid=3674&fromuid= ...

  8. JAVA语法基础之函数的使用说明

  9. PowerPoint 打开文档发现.pptx中胡内容有问题

    一.问题的提出 有一个文件,在window 7操作系统中通过邮箱地址保存到本地,结果打开的时候出现[PowerPoint 打开文档发现 文件.pptx中胡内容有问题] 然后提示[如果您信任此演示文稿的 ...

  10. 十五、EnterpriseFrameWork框架核心类库之系统启动入口与初始化

    本章内容是讲三种开发模式,web模式.Winform模式和Wcf模式的系统启动入口有什么区别,以及启动后系统初始化的内容:为什么要把这些单独提出来讲一章,因为我觉得本章非常重要,我们都知道程序中的ma ...