在网上传闻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。

好了,是时候粘贴代码了

  1. class SQLDMOHelper
  2. {
  3.  
  4. //增加
  5. public static void CreateDB(string dbName, string hostName, string instanceName, string username, string password)
  6. {
  7. SQLServer server = null;
  8. Application app=null;
  9. try
  10. {
  11. server = new SQLServer();
  12. app = new ApplicationClass();
  13. ConfigServer(server, hostName, instanceName, username, password);
  14. string dbPath = server.Registry.SQLDataRoot + @"\DATA\" + dbName;
  15.  
  16. foreach (Database db in server.Databases)
  17. if (db.Name == dbName) return;
  18.  
  19. Database database = new DatabaseClass();
  20. DBFile file = new DBFileClass();
  21. LogFile log = new LogFileClass();
  22.  
  23. database.Name = dbName;
  24. file.Name = dbName + "file";
  25. file.PhysicalName = dbPath + "_Data.mdf";
  26. file.PrimaryFile = true;
  27. file.FileGrowthType = ;
  28. file.FileGrowth = ;
  29. database.FileGroups.Item("primary").DBFiles.Add(file);
  30. log.Name = dbName + "log";
  31. log.PhysicalName = dbPath + "_Log.ldf";
  32. database.TransactionLog.LogFiles.Add(log);
  33. server.Databases.Add(database);
  34.  
  35. }
  36. catch
  37. {
  38. throw;
  39. }
  40. finally
  41. {
  42. if (server != null)
  43. {
  44. server.DisConnect();
  45. server.Close();
  46. }
  47. if (app != null)
  48. app.Quit();
  49. }
  50.  
  51. }
  52.  
  53. public static void CreateDB(string dbName, string hostName, string instanceName)
  54. {
  55. CreateDB(dbName, hostName, instanceName, "", "");
  56. }
  57.  
  58. //删除
  59.  
  60. public static void DeleteDB(string dbName, string hostName, string instanceName, string username, string password)
  61. {
  62. SQLServer server=null;
  63. try
  64. {
  65. server = new SQLServerClass();
  66. ConfigServer(server, hostName, instanceName, username, password);
  67. Database database = server.Databases.Item(dbName, null) as Database;
  68.  
  69. QueryResults queryRestlts = server.EnumProcesses(-);
  70. int iColPIDNum = -;
  71. int iColDbName = -;
  72. for (int i = ; i <= queryRestlts.Columns; i++)
  73. {
  74. string strName = queryRestlts.get_ColumnName(i);
  75. if (strName.ToUpper().Trim() == "SPID")
  76. {
  77. iColPIDNum = i;
  78. }
  79. else if (strName.ToUpper().Trim() == "DBNAME")
  80. {
  81. iColDbName = i;
  82. }
  83. if (iColPIDNum != - && iColDbName != -)
  84. break;
  85. }
  86.  
  87. for (int i = ; i <= queryRestlts.Rows; i++)
  88. {
  89. int lPID = queryRestlts.GetColumnLong(i, iColPIDNum);
  90. string strDBName = queryRestlts.GetColumnString(i, iColDbName);
  91. if (strDBName.ToUpper() == dbName)
  92. server.KillProcess(lPID);
  93. }
  94.  
  95. database.Remove();
  96. }
  97. catch
  98. {
  99. throw;
  100. }
  101. finally
  102. {
  103. if (server != null)
  104. {
  105. server.DisConnect();
  106. server.Close();
  107. }
  108. }
  109.  
  110. }
  111.  
  112. public static void DeleteDB(string dbName, string hostName, string instanceName)
  113. {
  114. DeleteDB(dbName, hostName, instanceName, "", "");
  115. }
  116.  
  117. //附加
  118. public static void AttachDB(string dbName,string dbFileName,string hostName,string instanceName,string username,string password)
  119. {
  120. SQLServer server = null;
  121. try
  122. {
  123. server = new SQLServer();
  124. ConfigServer(server, hostName, instanceName, username, password);
  125. server.AttachDBWithSingleFile(dbName, dbFileName);
  126. }
  127. catch
  128. {
  129. throw;
  130. }
  131. finally
  132. {
  133. if (server != null)
  134. {
  135. server.DisConnect();
  136. server.Close();
  137. }
  138. }
  139. }
  140.  
  141. public static void AttachDB(string dbName, string dbFileName, string hostName, string instanceName)
  142. {
  143. AttachDB(dbName, dbFileName, hostName, instanceName, "", "");
  144. }
  145.  
  146. //分离
  147. public static void DetachDB(string dbName, string dbFileName, string hostName, string instanceName, string username, string password)
  148. {
  149. SQLServer server = null;
  150. try
  151. {
  152. server = new SQLServer();
  153. ConfigServer(server, hostName, instanceName, username, password);
  154. server.DetachDB(dbName);
  155. }
  156. catch
  157. {
  158. throw;
  159. }
  160. finally
  161. {
  162. if (server != null)
  163. {
  164. server.DisConnect();
  165. server.Close();
  166. }
  167. }
  168. }
  169.  
  170. public static void DetachDB(string dbName, string dbFileName, string hostName, string instanceName)
  171. {
  172. DetachDB(dbName, dbFileName, hostName, instanceName, "", "");
  173. }
  174.  
  175. //脱机
  176. //联机
  177.  
  178. /// <summary>
  179. /// 数据库全备份 失败则会抛异常
  180. /// </summary>
  181. public static void BackupDB(string fileName, string dbName, string hostName, string instanceName, string username, string password)
  182. {
  183. SQLServer server=null;
  184. Backup backup=null;
  185. try
  186. {
  187. server = new SQLServer();
  188. backup = new Backup(); ConfigServer(server, hostName, instanceName, username, password);
  189. backup.Action = SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
  190. backup.Database = dbName;
  191. backup.BackupSetName = dbName;
  192. backup.BackupSetDescription = "数据库备份";
  193. backup.Files = fileName;
  194. backup.Initialize = true;
  195. backup.SQLBackup(server);
  196. }
  197. catch
  198. {
  199. throw;
  200. }
  201. finally
  202. {
  203. if (server != null)
  204. {
  205. server.DisConnect();
  206. server.Close();
  207. }
  208. }
  209. }
  210.  
  211. public static void BackupDB(string fileName, string dbName, string hostName, string instanceName)
  212. {
  213. BackupDB(fileName, dbName, hostName, instanceName,"","");
  214. }
  215.  
  216. /// <summary>
  217. /// 还原数据库 失败会抛异常
  218. /// </summary>
  219. public static void RestoreDB(string fileName, string dbName, string dbFileName, string hostName, string instanceName, string username, string password)
  220. {
  221. SQLServer server = null;
  222. Restore restore = null;
  223. try
  224. {
  225. server = new SQLServerClass();
  226. restore = new RestoreClass();
  227. ConfigServer(server, hostName, instanceName, username, password);
  228.  
  229. QueryResults queryRestlts = server.EnumProcesses(-);
  230. int iColPIDNum = -;
  231. int iColDbName = -;
  232. for (int i = ; i <= queryRestlts.Columns; i++)
  233. {
  234. string strName = queryRestlts.get_ColumnName(i);
  235. if (strName.ToUpper().Trim() == "SPID")
  236. {
  237. iColPIDNum = i;
  238. }
  239. else if (strName.ToUpper().Trim() == "DBNAME")
  240. {
  241. iColDbName = i;
  242. }
  243. if (iColPIDNum != - && iColDbName != -)
  244. break;
  245. }
  246.  
  247. for (int i = ; i <= queryRestlts.Rows; i++)
  248. {
  249. int lPID = queryRestlts.GetColumnLong(i, iColPIDNum);
  250. string strDBName = queryRestlts.GetColumnString(i, iColDbName);
  251. if (strDBName.ToUpper() == dbName)
  252. server.KillProcess(lPID);
  253. }
  254.  
  255. restore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
  256. restore.Database = dbName;
  257. restore.Files = fileName;
  258. restore.FileNumber = ;
  259. restore.ReplaceDatabase = true;
  260. restore.SQLRestore(server);
  261. }
  262. catch
  263. {
  264. throw;
  265. }
  266. finally
  267. {
  268. if (server != null)
  269. {
  270. server.DisConnect();
  271. server.Close();
  272. }
  273. }
  274. }
  275.  
  276. public static void RestoreDB(string fileName, string dbName, string dbFileName, string hostName, string instanceName)
  277. {
  278. RestoreDB(fileName, dbName, dbFileName, hostName,instanceName,"","");
  279. }
  280.  
  281. private static void ConfigServer(SQLServer server, string hostName, string instanceName, string userName = "", string password = "")
  282. {
  283. if (string.IsNullOrEmpty(userName) && string.IsNullOrEmpty(password))
  284. server.LoginSecure = true;
  285. else
  286. {
  287. server.Login = userName;
  288. server.Password = password;
  289. }
  290. server.Connect(hostName + "\\" + instanceName);
  291. }
  292. }

SQLDMOHelper的更多相关文章

随机推荐

  1. 【转】drupal7请求异常,执行时间过长的解决方法

    drupal7请求错误,执行时间过长的解决办法 根据你的系统或网络设置Drupal不能读取网页,造成功能缺失.可能是web服务器配置或PHP设置引起的,可用更新.获取更新源.使用OpenID登 录或使 ...

  2. Django 源码小剖: URL 调度器(URL dispatcher)

    在刚开始接触 django 的时候, 我们尝试着从各种入门文档中创建一个自己的 django 项目, 需要在 mysite.urls.py 中配置 URL. 这是 django url 匹配处理机制的 ...

  3. [原]OpenGL基础教程(四)VBO+纹理绘制四边形

    工程下载地址:http://pan.baidu.com/s/1ntr7NHv 提取码:yf1h 一.本文牵扯知识点梳理: (1)VBO (2)纹理 (3)libpng(加载png) (4)shader ...

  4. Maven3路程(三)用Maven创建第一个web项目(2)servlet演示

    上一章用Maven新建了web项目成功后,本文演示在此基础上应用servlet. 1.首先修改pom.xml文件,添加servlet依赖 <project xmlns="http:// ...

  5. ivqBlog 开源博客 (angularjs + express + mongodb)

    转向做全职前端差不多一年的时间了,其中学习了构建工具grunt,gulp,angularjs,coffeescript,less,sass,自己想要做全栈开发,所以自学了mongodb,nodejs, ...

  6. 向上下左右不间断无缝滚动图片的效果(兼容火狐和IE)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Unix sed实用教程开篇

    已经看了一段时间的Linux Shell编程了,也能完成一些基本的使用,为了加深理解,恰好看到了The Unix School的一个sed&awk教程,不是简单的命令参数堆积,而是一个相当实用 ...

  8. 配置<authorization>节(配置文件)

    在 Web.config 文件的<configuration>标记的子标记<authorization>和</authorization>之间用于设置应用程序的授权 ...

  9. sql server 2008 提示评估期已过的解决方法(升级无效)

    提示窗口: 解决步骤: 第一步:进入SQL2008配置工具中的安装中心 第二步:再进入维护界面,选择版本升级 第三步:进入产品密钥,输入密钥 第四步:一直点下一步,直到升级完毕. SQL Server ...

  10. 快乐的JS正则表达式(二)

    在上一篇中介绍了一个test方法,在本文中将使用另外一个,exec方法可以找到匹配的结果并且返回结果以及位置.exec("正则"): 简单测试: var str = "{ ...