using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
namespace Ant.Service.Utilities
{
/**/
/////
///// 创建人:季健国
///// 创建时间:2009年8月1日
///// 功能描述:实现数据库的备份和还原
///// 更新记录:
/////
//public class DbOperate
//{
// #region 调用方法
// //
// /**/
// /////
// ///// 备份按钮
// /////
// /////
// /////
// //private void wbtn_Backup_Click(object sender, System.EventArgs e)
// //{
// // DbOperate dbop = new DbOperate();
// // dbop.DbBackup();
// //}
// #endregion
// #region 实例
// /**/
// ///
// /// 服务器
// ///
// private string server;
// /**/
// ///
// /// 登录名
// ///
// private string uid;
// /**/
// ///
// /// 登录密码
// ///
// private string pwd;
// /**/
// ///
// /// 要操作的数据库
// ///
// private string database;
// /**/
// ///
// /// 数据库连接字符串
// ///
// private string conn;
// #endregion
// /**/
// ///
// /// DbOperate类的构造函数
// /// 在这里进行字符串的切割,获取服务器,登录名,密码,数据库
// ///
// public DbOperate()
// {
// conn = System.Configuration.ConfigurationSettings.AppSettings["DefaultConnectionString"].ToLower();
// server = StringCut(conn, "server=", ";");
// uid = StringCut(conn, "uid=", ";");
// pwd = StringCut(conn, "pwd=", ";");
// database = StringCut(conn, "database=", ";");
// }
// /**/
// ///
// /// 切割字符串
// ///
// ///
// ///
// ///
// ///
// public string StringCut(string str, string bg, string ed)
// {
// string sub;
// sub = str.Substring(str.IndexOf(bg) + bg.Length);
// sub = sub.Substring(0, sub.IndexOf(";"));
// return sub;
// }
// /**/
// ///
// /// 构造文件名
// ///
// /// 文件名
// private string CreatePath(string path)
// {
// string CurrTime = System.DateTime.Now.ToString("yyyyMMdd");
// //CurrTime = CurrTime.Replace("-", "");
// //CurrTime = CurrTime.Replace(":", "");
// //CurrTime = CurrTime.Replace(" ", "");
// //CurrTime = CurrTime.Substring(0, 12);
// if (path.IsEmpty())
// {
// path = @"d:\" + database + @"bak\";
// path += database;
// path += "_db_";
// path += CurrTime;
// path += ".BAK";
// }
// return path;
// }
// private SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
// SQLDMO.NameList sqlServers = null;
// ///
// /// 获取数据库实例,获取本地局域网所有开启的SQL服务名称
// ///
// ///
// public List ServerList()
// {
// List strlist = new List();
// sqlServers = sqlApp.ListAvailableSQLServers();
// for (int i = 0; i < sqlServers.Count; i++)
// {
// object srv = sqlServers.Item(i + 1);
// if (!srv.IsNull())
// {
// strlist.Add(srv.ToString());
// }
// }
// return strlist;
// }
// ///
// /// 获取服务器上所有数据库名称
// ///
// ///
// public List GetDataBase()
// {
// List strlist = new List();
// SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
// srv.Connect(server, uid, pwd);
// foreach (SQLDMO.Database db in srv.Databases)
// {
// if (db.Name != null)
// strlist.Add(db.Name);
// }
// return strlist;
// }
// ///
// /// 返回数据库所有表名
// ///
// ///
// ///
// public List GetTableName(string dbname)
// {
// DataTable dt = new DataTable();
// dt.Columns.Add("dbName");
// dt.Columns.Add("Name");
// dt.Columns.Add("Owner");
// dt.Columns.Add("CreatDate");
// dt.Columns.Add("PrimaryKey");
// List strlist = new List();
// SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
// srv.Connect(server, uid, pwd);
// for (int i = 0; i < srv.Databases.Count; i++)
// {
// if (srv.Databases.Item(i + 1, "dbo").Name == dbname)
// {
// SQLDMO._Database db = srv.Databases.Item(i + 1, "dbo");
// for (int j = 0; j < db.Tables.Count; j++)
// {
// strlist.Add(db.Tables.Item(j + 1, "dbo").Name);
// DataRow dr = dt.NewRow();
// ///表所属数据库
// dr["dbName"] = db.Name;
// ///获取表名
// dr["Name"] = db.Tables.Item(j + 1, "dbo").Name;
// ///获取表的所有者
// dr["Owner"] = db.Tables.Item(i + 1, "dbo").Owner;
// ///获取表的创建日期
// dr["CreatDate"] = db.Tables.Item(i + 1, "dbo").CreateDate;
// ///获取表的主键
// dr["PrimaryKey"] = db.Tables.Item(i + 1, "dbo").PrimaryKey;
// dt.Rows.Add(dr);
// }
// }
// }
// return strlist;
// }
// #region 得到数据库里表的字段
// //创建列信息表
// public DataTable CreateColumnTable()
// {
// DataTable table = new DataTable();
// DataColumn col;
// col = new DataColumn();
// col.DataType = Type.GetType("System.String");
// col.ColumnName = "colorder";
// table.Columns.Add(col);
// col = new DataColumn();
// col.DataType = Type.GetType("System.String");
// col.ColumnName = "ColumnName";
// table.Columns.Add(col);
// col = new DataColumn();
// col.DataType = Type.GetType("System.String");
// col.ColumnName = "TypeName";
// table.Columns.Add(col);
// col = new DataColumn();
// col.DataType = Type.GetType("System.String");
// col.ColumnName = "Length";
// table.Columns.Add(col);
// col = new DataColumn();
// col.DataType = Type.GetType("System.String");
// col.ColumnName = "Preci";
// table.Columns.Add(col);
// col = new DataColumn();
// col.DataType = Type.GetType("System.String");
// col.ColumnName = "Scale";
// table.Columns.Add(col);
// col = new DataColumn();
// col.DataType = Type.GetType("System.String");
// col.ColumnName = "IsIdentity";
// table.Columns.Add(col);
// col = new DataColumn();
// col.DataType = Type.GetType("System.String");
// col.ColumnName = "isPK";
// table.Columns.Add(col);
// col = new DataColumn();
// col.DataType = Type.GetType("System.String");
// col.ColumnName = "cisNull";
// table.Columns.Add(col);
// col = new DataColumn();
// col.DataType = Type.GetType("System.String");
// col.ColumnName = "defaultVal";
// table.Columns.Add(col);
// col = new DataColumn();
// col.DataType = Type.GetType("System.String");
// col.ColumnName = "deText";
// table.Columns.Add(col);
// return table;
// }
// #endregion
// public object GetColumnName(string dbname, string tablename)
// {
// #region 创建表结构
// DataTable dt = new DataTable();
// dt.Columns.Add("dbName");
// dt.Columns.Add("TableName");
// dt.Columns.Add("Name");
// dt.Columns.Add("PrimaryKey");
// dt.Columns.Add("Keys");
// dt.Columns.Add("Triggers");
// dt.Columns.Add("Indexs");
// dt.Columns.Add("Rows");
// dt.Columns.Add("Columns");
// #endregion
// SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
// List list = new List();
// srv.Connect(server, uid, pwd);
// try
// {
// //获得表的信息:
// //SQLDMO.Tables oTbs = srv.Databases.Item(dbname, "owner").Tables;
// //SQLDMO.Table oTb = new SQLDMO.TableClass();
// //oTb = (SQLDMO.Table)oTbs.Item(tablename, "owner");
// //或
// SQLDMO.Table oTb = (SQLDMO.Table)srv.Databases.Item(dbname, "dbo").Tables.Item(tablename, "dbo");
// // 获得字段的信息:
// SQLDMO.Column oField = new SQLDMO.ColumnClass();
// foreach (object o in oTb.Columns)
// {
// string[] oList = new string[10];
// oField = (SQLDMO.Column)o;
// oList[0] = oField.Name;
// oList[1] = oField.Datatype;
// oList[2] = oField.Length.ToString();
// oList[3] = oField.InPrimaryKey.ToString();
// oList[4] = oField.NumericScale.ToString();
// oList[5] = oField.Identity.ToString();
// oList[6] = oField.IdentitySeed.ToString();
// list.Add(oList);
// DataRow dr = dt.NewRow();
// dr["dbName"] = dbname;
// dr["TableName"] = tablename;
// dr["Name"] = oField.Name;
// dr["PrimaryKey"] = oField.InPrimaryKey.ToString();
// dr["Keys"] = oField.ListKeys();
// }
// }
// catch (Exception ex)
// {
// // log.WriteException(ex);
// }
// finally
// {
// srv.DisConnect();
// }
// return list;
// }
// //public DataTable GetTableColumnName(string dbname)
// //{
// // DataTable dt = CreateColumnTable();
// // List strlist = new List();
// // SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
// // srv.Connect(server, uid, pwd);
// // for (int i = 0; i < srv.Databases.Count; i++)
// // {
// // if (srv.Databases.Item(i + 1, "dbo").Name == dbname)
// // {
// // SQLDMO._Database db = srv.Databases.Item(i + 1, "dbo");
// // for (int j = 0; j < db.Tables.Count; j++)
// // {
// // SQLDMO._Column col = db.Tables.Item(j + 1, "dbo");
// // for(int k=0;k
// /// 获取数据库中的存储过程
// ///
// ///
// ///
// public List GetProcedures(string dbname)
// {
// List strlist = new List();
// SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
// srv.Connect(server, uid, pwd);
// for (int i = 0; i < srv.Databases.Count; i++)
// {
// if (srv.Databases.Item(i + 1, "dbo").Name == dbname)
// {
// SQLDMO._Database db = srv.Databases.Item(i + 1, "dbo");
// for (int j = 0; j < db.StoredProcedures.Count; j++)
// {
// strlist.Add(db.StoredProcedures.Item(j + 1, "dbo").Name);
// }
// }
// }
// return strlist;
// }
// ///
// /// 获取数据库中的视图
// ///
// ///
// ///
// public List GetView(string dbname)
// {
// List strlist = new List();
// SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
// srv.Connect(server, uid, pwd);
// for (int i = 0; i < srv.Databases.Count; i++)
// {
// if (srv.Databases.Item(i + 1, "dbo").Name == dbname)
// {
// SQLDMO._Database db = srv.Databases.Item(i + 1, "dbo");
// for (int j = 0; j < db.Views.Count; j++)
// {
// strlist.Add(db.Views.Item(j + 1, "dbo").Name);
// }
// }
// }
// return strlist;
// }
// /**/
// ///
// /// 数据库备份
// ///
// /// 备份是否成功
// public bool DbBackup(string filepath)
// {
// string path = CreatePath(filepath);
// SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
// SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
// try
// {
// oSQLServer.LoginSecure = false;
// oSQLServer.Connect(server, uid, pwd);
// oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
// oBackup.Database = database;
// oBackup.Files = path;
// oBackup.BackupSetName = database;
// oBackup.BackupSetDescription = "数据库备份";
// oBackup.Initialize = true;
// oBackup.SQLBackup(oSQLServer);
// return true;
// }
// catch (Exception ex)
// {
// return false;
// throw ex;
// }
// finally
// {
// oSQLServer.DisConnect();
// }
// }
// /**/
// ///
// /// 数据库恢复BackupRestore
// ///
// public string DbRestore(string filepath) //恢复代码
// {
// if (exepro() != true)//执行存储过程
// {
// return "操作失败";
// }
// else
// {
// SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
// SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
// try
// {
// exepro();
// oSQLServer.LoginSecure = false;
// oSQLServer.Connect(server, uid, pwd);
// oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
// oRestore.Database = database;
// /**/
// ///自行修改
// if (filepath.IsEmpty())
// oRestore.Files = @"d:\aaa\lucas_db_20130707.BAK";
// else
// oRestore.Files = filepath;
// oRestore.FileNumber = 1;
// oRestore.ReplaceDatabase = true;
// oRestore.SQLRestore(oSQLServer);
// return "ok";
// }
// catch (Exception e)
// {
// return "恢复数据库失败";
// throw e;
// }
// finally
// {
// oSQLServer.DisConnect();
// }
// }
// }
// /**/
// ///
// /// 杀死当前库的所有进程
// ///
// ///
// private bool exepro()
// {
// SqlConnection conn1 = new SqlConnection("server=" + server + ";uid=" + uid + ";pwd=" + pwd + ";database=master");
// SqlCommand cmd = new SqlCommand("KillSpid", conn1);
// cmd.CommandType = CommandType.StoredProcedure;
// cmd.Parameters.Add("@dbname", "lucas");
// try
// {
// conn1.Open();
// cmd.ExecuteNonQuery();
// return true;
// }
// catch (Exception ex)
// {
// return false;
// }
// finally
// {
// conn1.Close();
// }
// }
//}
}