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(); // } // } //} }