SQLDMOHelper
在网上传闻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的更多相关文章
随机推荐
- 【转】drupal7请求异常,执行时间过长的解决方法
drupal7请求错误,执行时间过长的解决办法 根据你的系统或网络设置Drupal不能读取网页,造成功能缺失.可能是web服务器配置或PHP设置引起的,可用更新.获取更新源.使用OpenID登 录或使 ...
- Django 源码小剖: URL 调度器(URL dispatcher)
在刚开始接触 django 的时候, 我们尝试着从各种入门文档中创建一个自己的 django 项目, 需要在 mysite.urls.py 中配置 URL. 这是 django url 匹配处理机制的 ...
- [原]OpenGL基础教程(四)VBO+纹理绘制四边形
工程下载地址:http://pan.baidu.com/s/1ntr7NHv 提取码:yf1h 一.本文牵扯知识点梳理: (1)VBO (2)纹理 (3)libpng(加载png) (4)shader ...
- Maven3路程(三)用Maven创建第一个web项目(2)servlet演示
上一章用Maven新建了web项目成功后,本文演示在此基础上应用servlet. 1.首先修改pom.xml文件,添加servlet依赖 <project xmlns="http:// ...
- ivqBlog 开源博客 (angularjs + express + mongodb)
转向做全职前端差不多一年的时间了,其中学习了构建工具grunt,gulp,angularjs,coffeescript,less,sass,自己想要做全栈开发,所以自学了mongodb,nodejs, ...
- 向上下左右不间断无缝滚动图片的效果(兼容火狐和IE)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Unix sed实用教程开篇
已经看了一段时间的Linux Shell编程了,也能完成一些基本的使用,为了加深理解,恰好看到了The Unix School的一个sed&awk教程,不是简单的命令参数堆积,而是一个相当实用 ...
- 配置<authorization>节(配置文件)
在 Web.config 文件的<configuration>标记的子标记<authorization>和</authorization>之间用于设置应用程序的授权 ...
- sql server 2008 提示评估期已过的解决方法(升级无效)
提示窗口: 解决步骤: 第一步:进入SQL2008配置工具中的安装中心 第二步:再进入维护界面,选择版本升级 第三步:进入产品密钥,输入密钥 第四步:一直点下一步,直到升级完毕. SQL Server ...
- 快乐的JS正则表达式(二)
在上一篇中介绍了一个test方法,在本文中将使用另外一个,exec方法可以找到匹配的结果并且返回结果以及位置.exec("正则"): 简单测试: var str = "{ ...