SQLBackupRestore.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. using System;
  2. using System.Collections;
  3. using System.Data;
  4. using System.Data.SqlClient;
  5. using System.Collections.Generic;
  6. namespace Ant.Service.Utilities
  7. {
  8. /**/
  9. ///// <summary>
  10. ///// 创建人:季健国
  11. ///// 创建时间:2009年8月1日
  12. ///// 功能描述:实现数据库的备份和还原
  13. ///// 更新记录:
  14. ///// </summary>
  15. //public class DbOperate
  16. //{
  17. // #region 调用方法
  18. // //<asp:Button id="wbtn_Backup" runat="server" Width="60px" Text="备 份" CssClass="Button"></asp:Button>
  19. // /**/
  20. // ///// <summary>
  21. // ///// 备份按钮
  22. // ///// </summary>
  23. // ///// <param name="sender"></param>
  24. // ///// <param name="e"></param>
  25. // //private void wbtn_Backup_Click(object sender, System.EventArgs e)
  26. // //{
  27. // // DbOperate dbop = new DbOperate();
  28. // // dbop.DbBackup();
  29. // //}
  30. // #endregion
  31. // #region 实例
  32. // /**/
  33. // /// <summary>
  34. // /// 服务器
  35. // /// </summary>
  36. // private string server;
  37. // /**/
  38. // /// <summary>
  39. // /// 登录名
  40. // /// </summary>
  41. // private string uid;
  42. // /**/
  43. // /// <summary>
  44. // /// 登录密码
  45. // /// </summary>
  46. // private string pwd;
  47. // /**/
  48. // /// <summary>
  49. // /// 要操作的数据库
  50. // /// </summary>
  51. // private string database;
  52. // /**/
  53. // /// <summary>
  54. // /// 数据库连接字符串
  55. // /// </summary>
  56. // private string conn;
  57. // #endregion
  58. // /**/
  59. // /// <summary>
  60. // /// DbOperate类的构造函数
  61. // /// 在这里进行字符串的切割,获取服务器,登录名,密码,数据库
  62. // /// </summary>
  63. // public DbOperate()
  64. // {
  65. // conn = System.Configuration.ConfigurationSettings.AppSettings["DefaultConnectionString"].ToLower();
  66. // server = StringCut(conn, "server=", ";");
  67. // uid = StringCut(conn, "uid=", ";");
  68. // pwd = StringCut(conn, "pwd=", ";");
  69. // database = StringCut(conn, "database=", ";");
  70. // }
  71. // /**/
  72. // /// <summary>
  73. // /// 切割字符串
  74. // /// </summary>
  75. // /// <param name="str"></param>
  76. // /// <param name="bg"></param>
  77. // /// <param name="ed"></param>
  78. // /// <returns></returns>
  79. // public string StringCut(string str, string bg, string ed)
  80. // {
  81. // string sub;
  82. // sub = str.Substring(str.IndexOf(bg) + bg.Length);
  83. // sub = sub.Substring(0, sub.IndexOf(";"));
  84. // return sub;
  85. // }
  86. // /**/
  87. // /// <summary>
  88. // /// 构造文件名
  89. // /// </summary>
  90. // /// <returns>文件名</returns>
  91. // private string CreatePath(string path)
  92. // {
  93. // string CurrTime = System.DateTime.Now.ToString("yyyyMMdd");
  94. // //CurrTime = CurrTime.Replace("-", "");
  95. // //CurrTime = CurrTime.Replace(":", "");
  96. // //CurrTime = CurrTime.Replace(" ", "");
  97. // //CurrTime = CurrTime.Substring(0, 12);
  98. // if (path.IsEmpty())
  99. // {
  100. // path = @"d:\" + database + @"bak\";
  101. // path += database;
  102. // path += "_db_";
  103. // path += CurrTime;
  104. // path += ".BAK";
  105. // }
  106. // return path;
  107. // }
  108. // private SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
  109. // SQLDMO.NameList sqlServers = null;
  110. // /// <summary>
  111. // /// 获取数据库实例,获取本地局域网所有开启的SQL服务名称
  112. // /// </summary>
  113. // /// <returns></returns>
  114. // public List<string> ServerList()
  115. // {
  116. // List<string> strlist = new List<string>();
  117. // sqlServers = sqlApp.ListAvailableSQLServers();
  118. // for (int i = 0; i < sqlServers.Count; i++)
  119. // {
  120. // object srv = sqlServers.Item(i + 1);
  121. // if (!srv.IsNull())
  122. // {
  123. // strlist.Add(srv.ToString());
  124. // }
  125. // }
  126. // return strlist;
  127. // }
  128. // /// <summary>
  129. // /// 获取服务器上所有数据库名称
  130. // /// </summary>
  131. // /// <returns></returns>
  132. // public List<string> GetDataBase()
  133. // {
  134. // List<string> strlist = new List<string>();
  135. // SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
  136. // srv.Connect(server, uid, pwd);
  137. // foreach (SQLDMO.Database db in srv.Databases)
  138. // {
  139. // if (db.Name != null)
  140. // strlist.Add(db.Name);
  141. // }
  142. // return strlist;
  143. // }
  144. // /// <summary>
  145. // /// 返回数据库所有表名
  146. // /// </summary>
  147. // /// <param name="dbname"></param>
  148. // /// <returns></returns>
  149. // public List<string> GetTableName(string dbname)
  150. // {
  151. // DataTable dt = new DataTable();
  152. // dt.Columns.Add("dbName");
  153. // dt.Columns.Add("Name");
  154. // dt.Columns.Add("Owner");
  155. // dt.Columns.Add("CreatDate");
  156. // dt.Columns.Add("PrimaryKey");
  157. // List<string> strlist = new List<string>();
  158. // SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
  159. // srv.Connect(server, uid, pwd);
  160. // for (int i = 0; i < srv.Databases.Count; i++)
  161. // {
  162. // if (srv.Databases.Item(i + 1, "dbo").Name == dbname)
  163. // {
  164. // SQLDMO._Database db = srv.Databases.Item(i + 1, "dbo");
  165. // for (int j = 0; j < db.Tables.Count; j++)
  166. // {
  167. // strlist.Add(db.Tables.Item(j + 1, "dbo").Name);
  168. // DataRow dr = dt.NewRow();
  169. // ///表所属数据库
  170. // dr["dbName"] = db.Name;
  171. // ///获取表名
  172. // dr["Name"] = db.Tables.Item(j + 1, "dbo").Name;
  173. // ///获取表的所有者
  174. // dr["Owner"] = db.Tables.Item(i + 1, "dbo").Owner;
  175. // ///获取表的创建日期
  176. // dr["CreatDate"] = db.Tables.Item(i + 1, "dbo").CreateDate;
  177. // ///获取表的主键
  178. // dr["PrimaryKey"] = db.Tables.Item(i + 1, "dbo").PrimaryKey;
  179. // dt.Rows.Add(dr);
  180. // }
  181. // }
  182. // }
  183. // return strlist;
  184. // }
  185. // #region 得到数据库里表的字段
  186. // //创建列信息表
  187. // public DataTable CreateColumnTable()
  188. // {
  189. // DataTable table = new DataTable();
  190. // DataColumn col;
  191. // col = new DataColumn();
  192. // col.DataType = Type.GetType("System.String");
  193. // col.ColumnName = "colorder";
  194. // table.Columns.Add(col);
  195. // col = new DataColumn();
  196. // col.DataType = Type.GetType("System.String");
  197. // col.ColumnName = "ColumnName";
  198. // table.Columns.Add(col);
  199. // col = new DataColumn();
  200. // col.DataType = Type.GetType("System.String");
  201. // col.ColumnName = "TypeName";
  202. // table.Columns.Add(col);
  203. // col = new DataColumn();
  204. // col.DataType = Type.GetType("System.String");
  205. // col.ColumnName = "Length";
  206. // table.Columns.Add(col);
  207. // col = new DataColumn();
  208. // col.DataType = Type.GetType("System.String");
  209. // col.ColumnName = "Preci";
  210. // table.Columns.Add(col);
  211. // col = new DataColumn();
  212. // col.DataType = Type.GetType("System.String");
  213. // col.ColumnName = "Scale";
  214. // table.Columns.Add(col);
  215. // col = new DataColumn();
  216. // col.DataType = Type.GetType("System.String");
  217. // col.ColumnName = "IsIdentity";
  218. // table.Columns.Add(col);
  219. // col = new DataColumn();
  220. // col.DataType = Type.GetType("System.String");
  221. // col.ColumnName = "isPK";
  222. // table.Columns.Add(col);
  223. // col = new DataColumn();
  224. // col.DataType = Type.GetType("System.String");
  225. // col.ColumnName = "cisNull";
  226. // table.Columns.Add(col);
  227. // col = new DataColumn();
  228. // col.DataType = Type.GetType("System.String");
  229. // col.ColumnName = "defaultVal";
  230. // table.Columns.Add(col);
  231. // col = new DataColumn();
  232. // col.DataType = Type.GetType("System.String");
  233. // col.ColumnName = "deText";
  234. // table.Columns.Add(col);
  235. // return table;
  236. // }
  237. // #endregion
  238. // public object GetColumnName(string dbname, string tablename)
  239. // {
  240. // #region 创建表结构
  241. // DataTable dt = new DataTable();
  242. // dt.Columns.Add("dbName");
  243. // dt.Columns.Add("TableName");
  244. // dt.Columns.Add("Name");
  245. // dt.Columns.Add("PrimaryKey");
  246. // dt.Columns.Add("Keys");
  247. // dt.Columns.Add("Triggers");
  248. // dt.Columns.Add("Indexs");
  249. // dt.Columns.Add("Rows");
  250. // dt.Columns.Add("Columns");
  251. // #endregion
  252. // SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
  253. // List<string[]> list = new List<string[]>();
  254. // srv.Connect(server, uid, pwd);
  255. // try
  256. // {
  257. // //获得表的信息:
  258. // //SQLDMO.Tables oTbs = srv.Databases.Item(dbname, "owner").Tables;
  259. // //SQLDMO.Table oTb = new SQLDMO.TableClass();
  260. // //oTb = (SQLDMO.Table)oTbs.Item(tablename, "owner");
  261. // //或
  262. // SQLDMO.Table oTb = (SQLDMO.Table)srv.Databases.Item(dbname, "dbo").Tables.Item(tablename, "dbo");
  263. // // 获得字段的信息:
  264. // SQLDMO.Column oField = new SQLDMO.ColumnClass();
  265. // foreach (object o in oTb.Columns)
  266. // {
  267. // string[] oList = new string[10];
  268. // oField = (SQLDMO.Column)o;
  269. // oList[0] = oField.Name;
  270. // oList[1] = oField.Datatype;
  271. // oList[2] = oField.Length.ToString();
  272. // oList[3] = oField.InPrimaryKey.ToString();
  273. // oList[4] = oField.NumericScale.ToString();
  274. // oList[5] = oField.Identity.ToString();
  275. // oList[6] = oField.IdentitySeed.ToString();
  276. // list.Add(oList);
  277. // DataRow dr = dt.NewRow();
  278. // dr["dbName"] = dbname;
  279. // dr["TableName"] = tablename;
  280. // dr["Name"] = oField.Name;
  281. // dr["PrimaryKey"] = oField.InPrimaryKey.ToString();
  282. // dr["Keys"] = oField.ListKeys();
  283. // }
  284. // }
  285. // catch (Exception ex)
  286. // {
  287. // // log.WriteException(ex);
  288. // }
  289. // finally
  290. // {
  291. // srv.DisConnect();
  292. // }
  293. // return list;
  294. // }
  295. // //public DataTable GetTableColumnName(string dbname)
  296. // //{
  297. // // DataTable dt = CreateColumnTable();
  298. // // List<string> strlist = new List<string>();
  299. // // SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
  300. // // srv.Connect(server, uid, pwd);
  301. // // for (int i = 0; i < srv.Databases.Count; i++)
  302. // // {
  303. // // if (srv.Databases.Item(i + 1, "dbo").Name == dbname)
  304. // // {
  305. // // SQLDMO._Database db = srv.Databases.Item(i + 1, "dbo");
  306. // // for (int j = 0; j < db.Tables.Count; j++)
  307. // // {
  308. // // SQLDMO._Column col = db.Tables.Item(j + 1, "dbo");
  309. // // for(int k=0;k<co)
  310. // // //strlist.Add(db.Tables.Item(j + 1, "dbo").Name);
  311. // // }
  312. // // }
  313. // // }
  314. // // return dt;
  315. // //}
  316. // /// <summary>
  317. // /// 获取数据库中的存储过程
  318. // /// </summary>
  319. // /// <param name="dbname"></param>
  320. // /// <returns></returns>
  321. // public List<string> GetProcedures(string dbname)
  322. // {
  323. // List<string> strlist = new List<string>();
  324. // SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
  325. // srv.Connect(server, uid, pwd);
  326. // for (int i = 0; i < srv.Databases.Count; i++)
  327. // {
  328. // if (srv.Databases.Item(i + 1, "dbo").Name == dbname)
  329. // {
  330. // SQLDMO._Database db = srv.Databases.Item(i + 1, "dbo");
  331. // for (int j = 0; j < db.StoredProcedures.Count; j++)
  332. // {
  333. // strlist.Add(db.StoredProcedures.Item(j + 1, "dbo").Name);
  334. // }
  335. // }
  336. // }
  337. // return strlist;
  338. // }
  339. // /// <summary>
  340. // /// 获取数据库中的视图
  341. // /// </summary>
  342. // /// <param name="dbname"></param>
  343. // /// <returns></returns>
  344. // public List<string> GetView(string dbname)
  345. // {
  346. // List<string> strlist = new List<string>();
  347. // SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
  348. // srv.Connect(server, uid, pwd);
  349. // for (int i = 0; i < srv.Databases.Count; i++)
  350. // {
  351. // if (srv.Databases.Item(i + 1, "dbo").Name == dbname)
  352. // {
  353. // SQLDMO._Database db = srv.Databases.Item(i + 1, "dbo");
  354. // for (int j = 0; j < db.Views.Count; j++)
  355. // {
  356. // strlist.Add(db.Views.Item(j + 1, "dbo").Name);
  357. // }
  358. // }
  359. // }
  360. // return strlist;
  361. // }
  362. // /**/
  363. // /// <summary>
  364. // /// 数据库备份
  365. // /// </summary>
  366. // /// <returns>备份是否成功</returns>
  367. // public bool DbBackup(string filepath)
  368. // {
  369. // string path = CreatePath(filepath);
  370. // SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
  371. // SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
  372. // try
  373. // {
  374. // oSQLServer.LoginSecure = false;
  375. // oSQLServer.Connect(server, uid, pwd);
  376. // oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
  377. // oBackup.Database = database;
  378. // oBackup.Files = path;
  379. // oBackup.BackupSetName = database;
  380. // oBackup.BackupSetDescription = "数据库备份";
  381. // oBackup.Initialize = true;
  382. // oBackup.SQLBackup(oSQLServer);
  383. // return true;
  384. // }
  385. // catch (Exception ex)
  386. // {
  387. // return false;
  388. // throw ex;
  389. // }
  390. // finally
  391. // {
  392. // oSQLServer.DisConnect();
  393. // }
  394. // }
  395. // /**/
  396. // /// <summary>
  397. // /// 数据库恢复BackupRestore
  398. // /// </summary>
  399. // public string DbRestore(string filepath) //恢复代码
  400. // {
  401. // if (exepro() != true)//执行存储过程
  402. // {
  403. // return "操作失败";
  404. // }
  405. // else
  406. // {
  407. // SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
  408. // SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
  409. // try
  410. // {
  411. // exepro();
  412. // oSQLServer.LoginSecure = false;
  413. // oSQLServer.Connect(server, uid, pwd);
  414. // oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
  415. // oRestore.Database = database;
  416. // /**/
  417. // ///自行修改
  418. // if (filepath.IsEmpty())
  419. // oRestore.Files = @"d:\aaa\lucas_db_20130707.BAK";
  420. // else
  421. // oRestore.Files = filepath;
  422. // oRestore.FileNumber = 1;
  423. // oRestore.ReplaceDatabase = true;
  424. // oRestore.SQLRestore(oSQLServer);
  425. // return "ok";
  426. // }
  427. // catch (Exception e)
  428. // {
  429. // return "恢复数据库失败";
  430. // throw e;
  431. // }
  432. // finally
  433. // {
  434. // oSQLServer.DisConnect();
  435. // }
  436. // }
  437. // }
  438. // /**/
  439. // /// <summary>
  440. // /// 杀死当前库的所有进程
  441. // /// </summary>
  442. // /// <returns></returns>
  443. // private bool exepro()
  444. // {
  445. // SqlConnection conn1 = new SqlConnection("server=" + server + ";uid=" + uid + ";pwd=" + pwd + ";database=master");
  446. // SqlCommand cmd = new SqlCommand("KillSpid", conn1);
  447. // cmd.CommandType = CommandType.StoredProcedure;
  448. // cmd.Parameters.Add("@dbname", "lucas");
  449. // try
  450. // {
  451. // conn1.Open();
  452. // cmd.ExecuteNonQuery();
  453. // return true;
  454. // }
  455. // catch (Exception ex)
  456. // {
  457. // return false;
  458. // }
  459. // finally
  460. // {
  461. // conn1.Close();
  462. // }
  463. // }
  464. //}
  465. }