为什么封装了类打开localhost怎么查看查看会弹出下载提示

SQL Server 2012 SMO 操作封装类_小组_ThinkSAAS
SQL Server 2012 SMO 操作封装类
SQL Server 2012 SMO 操作封装类
可以用于对SQL Server 2012数据库中的数据库和表进行各种DMO操作,也可以维护数据库,如收缩数据库,更新数据库索引统计信息等,便于实现SQL Server维护自动化。
btnDBBackup.Enabled =
SMO smo = new SMO("Data Source=Integrated Security=T");
smo.databaseName ="test";
smo.tableName ="tb";
MessageBox.Show(smo.GetCreateTableScript());
//List&string& ls = smo.WalkDependency();
//int i = 0;
btnDBBackup.Enabled =
using Microsoft. //在microsoft.sqlserver.smo.dll中
using Microsoft.SqlServer.Management.Sdk.S
using Microsoft.SqlServer.Management.S //需添加microsoft.sqlserver.smo.dll的引用
using System.Collections.G
using System.Collections.S
using System.IO; //需添加microsoft.sqlserver.connectioninfo.dll的引用
using System.L
using System.T
using System.Windows.F
namespace DemoSMO
private static Server server =
private static string instanceN
private static string remoteSvrN
private static bool loginS
private ConnectionType connectionT
private enum ConnectionType
ConnectionString,
ConnectToLocalDefaultInstance,
ConnectToLocalNamedInstance,
ConnectToRemoteServer
public SMO(string connectionString)
this.connectionType = ConnectionType.ConnectionS
SMO.connectionString = connectionS
public SMO(string loginName, string loginPassword)
this.connectionType = ConnectionType.ConnectToLocalDefaultI
SMO.loginName = loginN
SMO.loginPassword = loginP
public SMO(string instanceName, string loginName, string loginPassword)
this.connectionType = ConnectionType.ConnectToLocalNamedI
SMO.instanceName = instanceN
SMO.loginName = loginN
SMO.loginPassword = loginP
public SMO(string remoteSvrName, string loginName, string loginPassword, bool loginSecure = false)
this.connectionType = ConnectionType.ConnectToRemoteS
SMO.remoteSvrName = remoteSvrN
SMO.loginSecure = loginS
SMO.loginName = loginN
SMO.loginPassword = loginP
Disconnect();
/// &summary&
/// 通过连接字符串创建数据库连接
/// &/summary&
private static void ConnectByConnectionString()
if (server == null)
//创建ServerConnection的实例
ServerConnection connection = new ServerConnection();
//指定连接字符串
connection.ConnectionString = connectionS
//实例化Server
server = new Server(connection);
catch (Exception ex)
Disconnect();
/// &summary&
/// 创建本地默认实例的数据库连接
/// &/summary&
private static void ConnectToLocalDefaultInstance()
// Connecting to an instance of SQL Server using SQL Server Authentication
server = new Server(); // connects to default instance
server.ConnectionContext.LoginSecure = // set to true for Windows Authentication
server.ConnectionContext.Login = loginN
server.ConnectionContext.Password = loginP
catch (Exception ex)
Disconnect();
/// &summary&
/// 创建数据本地命名实例的库连接
/// &/summary&
private static void ConnectToLocalNamedInstance()
// Connecting to a named instance of SQL Server with SQL Server Authentication using ServerConnection
ServerConnection srvConn = new ServerConnection();
srvConn.ServerInstance = @"."+ instanceN // connects to named instance
srvConn.LoginSecure = // set to true for Windows Authentication
srvConn.Login = loginN
srvConn.Password = loginP
server = new Server(srvConn);
catch (Exception ex)
Disconnect();
/// &summary&
/// 创建远程服务器的数据库连接
/// &/summary&
private static void ConnectToRemoteServer()
// For remote connection, remote server name / ServerInstance needs to be specified
ServerConnection srvConn2 = new ServerConnection(remoteSvrName);
srvConn2.LoginSecure =
srvConn2.Login = loginN
srvConn2.Password = loginP
server = new Server(srvConn2);
catch (Exception ex)
Disconnect();
private delegate void ConnectionMethods();
ConnectionMethods[] connectionMethods =
ConnectByConnectionString,
ConnectToLocalDefaultInstance,
ConnectToLocalNamedInstance,
ConnectToRemoteServer
/// &summary&
/// 连接字符串
/// &/summary&
public static string connectionString { }
/// &summary&
/// 数据库名
/// &/summary&
public string databaseName { }
/// &summary&
/// &/summary&
public string tableName { }
/// &summary&
/// 数据的文件夹
/// &/summary&
public string Path { }
/// &summary&
/// 存放备份数据的文件夹
/// &/summary&
public string backupPath { }
/// &summary&
/// 数据库登录名
/// &/summary&
public static string loginName { }
/// &summary&
/// 数据库的数据占用空间大小
/// &/summary&
public double DB_DataSpaceUsage
Connect();
Database db = server.Databases[databaseName];
if (db != null)
return db.DataSpaceU
return -1;
catch (Exception ex)
Disconnect();
/// &summary&
/// 数据库的索引占用空间大小
/// &/summary&
public double DB_IndexSpaceUsage
Connect();
Database db = server.Databases[databaseName];
if (db != null)
return db.IndexSpaceU
return -1;
catch (Exception ex)
Disconnect();
/// &summary&
/// 数据库的可用空间大小
/// &/summary&
public double DB_SpaceAvailable
Connect();
Database db = server.Databases[databaseName];
if (db != null)
return db.SpaceA
return -1;
catch (Exception ex)
Disconnect();
/// &summary&
/// 数据库的空间大小
/// &/summary&
public double DB_Size
Connect();
Database db = server.Databases[databaseName];
if (db != null)
return db.S
return -1;
catch (Exception ex)
Disconnect();
/// &summary&
/// 登录密码
/// &/summary&
public static string loginPassword { }
/// &summary&
/// 显示数据库常见对象信息示例
/// &/summary&
public void ShowSMOObjects()
//创建ServerConnection的实例
ServerConnection connection = new ServerConnection();
//指定连接字符串
connection.ConnectionString = connectionS
//实例化Server
Server server = new Server(connection);
MessageBox.Show(string.Format("InstanceName:{0}", server.InstanceName));
//下面列出每个数据库的具体信息
foreach (Database db in server.Databases)
MessageBox.Show(string.Format("Database Name:{0},ActiveConnections:{1},DataSpaceUsage:{2},PrimaryFilePath:{3}", db.Name, db.ActiveConnections, db.DataSpaceUsage, db.PrimaryFilePath));
//列出数据库的数据文件文件组信息
foreach (FileGroup fileGroup in db.FileGroups)
MessageBox.Show(string.Format("FileGroup Name:{0},Size:{1},State:{2},Urn:{3}", fileGroup.Name, fileGroup.Size, fileGroup.State, fileGroup.Urn));
//列出每个文件组中的数据文件信息
foreach (DataFile dataFile in fileGroup.Files)
MessageBox.Show(string.Format("DataFile Name:{0},Size:{1},State:{2},Urn:{3},FileName:{4}", dataFile.Name, dataFile.Size, dataFile.State, dataFile.Urn, dataFile.FileName));
//列出数据库日志文件信息
foreach (LogFile logFile in db.LogFiles)
MessageBox.Show(string.Format("tLogFile Name:{0},Size:{1},State:{2},Urn:{3},FileName:{4}", logFile.Name, logFile.Size, logFile.State, logFile.Urn, logFile.FileName));
/// &summary&
/// 利用SMO创建SQL登录
/// &param name="overwrite"&删除已经存在的登录名&/param&
/// &/summary&
public void CreateLogin(bool overwrite = false)
if (databaseName == null || databaseName.Trim() == string.Empty)
throw new ArgumentNullException("databaseName");
//创建ServerConnection的实例
ServerConnection connection = new ServerConnection();
//指定连接字符串
connection.ConnectionString = connectionS
//实例化Server
Server server = new Server(connection);
#region [创建数据库登录对象]
//检查在数据库是否已经存在该登录名
var queryLogin = from Login temp in server.Logins
where string.Equals(temp.Name, loginName, StringComparison.CurrentCultureIgnoreCase)
Login login = queryLogin.FirstOrDefault&Login&();
if (login != null)
//如果存在就删除
if (overwrite)
login.Drop();
throw new InvalidDataException(loginName);
login = new Login(server, loginName);
login.LoginType = LoginType.SqlL//指定登录方式为SQL认证
login.PasswordPolicyEnforced =
login.DefaultDatabase ="master";//默认数据库
login.Create(loginPassword);
#endregion
catch (Exception ex)
Disconnect();
/// &summary&
/// 创建数据库
/// &/summary&
/// &param name="overwrite"&删除已经存在的数据库&/param&
public void CreateDatabase(bool overwrite = false)
if (databaseName == null || databaseName.Trim() == string.Empty)
throw new ArgumentNullException("databaseName");
if (Path == null || Path.Trim() == string.Empty)
throw new ArgumentNullException("Path");
if (!Directory.Exists(Path))
throw new InvalidArgumentException(Path);
if (Path[Path.Length - 1] != '\')
Path += '\';
Connect();
#region [创建数据库对象]
//检查在数据库是否已经存在该数据库
Database database = server.Databases[databaseName];
if (database != null)
//如果存在就删除
if (overwrite)
database.Drop();
throw new InvalidDataException(databaseName);
database = new Database(server, databaseName);
//指定数据库数据文件细节
FileGroup fileGroup = new FileGroup { Name ="PRIMARY", Parent = database, IsDefault = true };
DataFile dataFile = new DataFile
Name = databaseName +"_Data",
Parent = fileGroup,
FileName = Path + databaseName +".mdf"
fileGroup.Files.Add(dataFile);
//指定数据库日志文件细节
LogFile logFile = new LogFile
Name = databaseName +"_Log",
Parent = database,
FileName = Path + databaseName +"_log.ldf"
database.FileGroups.Add(fileGroup);
database.LogFiles.Add(logFile);
database.Create();
#endregion
catch (Exception ex)
Disconnect();
/// &summary&
/// 删除数据库
/// &/summary&
public void DropDatabase()
if (databaseName == null || databaseName.Trim() == string.Empty)
throw new ArgumentNullException("databaseName");
Connect();
#region [创建数据库对象]
//检查在数据库是否已经存在该数据库
Database database = server.Databases[databaseName];
if (database != null)
database.Drop();
throw new InvalidDataException(databaseName);
#endregion
catch (Exception ex)
Disconnect();
/// &summary&
/// 备份数据库
/// &/summary&
public void BackupDatabase()
if (databaseName == null || databaseName.Trim() == string.Empty)
throw new ArgumentNullException("databaseName");
if (backupPath == null || backupPath.Trim() == string.Empty)
throw new ArgumentNullException("backupPath");
if (!Directory.Exists(backupPath))
throw new InvalidArgumentException(backupPath);
if (backupPath[backupPath.Length - 1] != '\')
backupPath += '\';
Connect();
#region [创建数据库备份对象]
Backup backup = new Backup();
backup.Action = BackupActionType.D//完全备份
backup.Database = databaseN
backup.BackupSetDescription ="Full backup of"+ databaseN
backup.BackupSetName = databaseName +"Backup";
//创建备份设备
BackupDeviceItem bkDeviceItem = new BackupDeviceItem();
bkDeviceItem.DeviceType = DeviceType.F
bkDeviceItem.Name = string.Format(@"{0}{1}.{2}", backupPath, databaseName,"bak");
backup.Devices.Add(bkDeviceItem);
backup.Incremental =
backup.LogTruncation = BackupTruncateLogType.T
backup.SqlBackup(server);
#endregion
catch (Exception ex)
Disconnect();
/// &summary&
/// 还原数据库
/// &/summary&
public void RestoreDatabase()
if (databaseName == null || databaseName.Trim() == string.Empty)
throw new ArgumentNullException("databaseName");
if (Path == null || Path.Trim() == string.Empty)
throw new ArgumentNullException("Path");
if (!Directory.Exists(Path))
throw new InvalidArgumentException(Path);
if (Path[Path.Length - 1] != '\')
Path += '\';
if (backupPath == null || backupPath.Trim() == string.Empty)
throw new ArgumentNullException("backupPath");
if (!Directory.Exists(backupPath))
throw new InvalidArgumentException(backupPath);
if (backupPath[backupPath.Length - 1] != '\')
backupPath += '\';
Connect();
Restore restore = new Restore();
restore.NoRecovery =
restore.NoRewind =
restore.ReplaceDatabase =
restore.Action = RestoreActionType.D
restore.Database = databaseN
Database currentDb = server.Databases[databaseName];
//看是否数据库已经存在
if (currentDb != null)
server.ConnectionContext.SqlConnectionObject.ChangeDatabase(databaseName);
//Stop all processes running on the DataBase database
server.KillAllProcesses(databaseName);
//创建备份设备
BackupDeviceItem bkDeviceItem = new BackupDeviceItem();
bkDeviceItem.DeviceType = DeviceType.F
bkDeviceItem.Name = string.Format(@"{0}{1}.{2}", backupPath, databaseName,"bak");
//如果需要重新制定Restore后的数据库的物理文件位置,需要知道数据库文件的逻辑文件名
//可以RESTORE FILELISTONLY 来列出逻辑文件名,如果覆盖已有数据库可以通过SMO来获取
//因本处使用的是刚刚备份的msdb数据库来Restore,所以其分别为"MSDBData"和"MSDBLog"
//如果不指定Restore路径则默认恢复到数据库服务器存放数据的文件夹下
RelocateFile relocateDataFile = new RelocateFile { LogicalFileName = databaseName +"_Data", PhysicalFileName = Path + databaseName +".mdf"};
RelocateFile relocateLogFile = new RelocateFile { LogicalFileName = databaseName +"_Log", PhysicalFileName = Path + databaseName +"_log.ldf"};
restore.Devices.Add(bkDeviceItem);
restore.RelocateFiles.Add(relocateDataFile);
restore.RelocateFiles.Add(relocateLogFile);
restore.SqlRestore(server);
catch (Exception ex)
Disconnect();
/// &summary&
/// 创建数据库连接
/// &/summary&
public void Connect()
if (server == null)
//选择连接数据库的方式
connectionMethods[(int)connectionType]();
server.ConnectionContext.Connect();
//Disable automatic disconnection.
server.ConnectionContext.AutoDisconnectMode = AutoDisconnectMode.NoAutoD
catch (Exception ex)
Disconnect();
/// &summary&
/// 断开数据库连接
/// &/summary&
public static void Disconnect()
if (server != null)
//Disconnect explicitly.
server.ConnectionContext.Disconnect();
/// &summary&
/// 捕获SQL Server运行时的SQL
/// &/summary&
public void CaptureSQL()
Connect();
// Set the execution mode to CaptureSql for the connection.
server.ConnectionContext.SqlExecutionModes = SqlExecutionModes.CaptureS
// Make a modification to the server that is to be captured.
server.UserOptions.AnsiNulls =
server.Alter();
// Iterate through the strings in the capture buffer and display the captured statements.
foreach (String p_s in server.ConnectionContext.CapturedSql.Text)
Console.WriteLine(p_s);
// Execute the captured statements.
server.ConnectionContext.ExecuteNonQuery(server.ConnectionContext.CapturedSql.Text);
// Revert to immediate execution mode.
server.ConnectionContext.SqlExecutionModes = SqlExecutionModes.ExecuteS
catch (Exception ex)
Disconnect();
/// &summary&
/// 获得表的Create脚本
/// &/summary&
public string GetCreateTableScript()
if (databaseName == null || databaseName.Trim() == string.Empty)
throw new ArgumentNullException("databaseName");
if (tableName == null || tableName.Trim() == string.Empty)
throw new ArgumentNullException("tableName");
Connect();
Database db = server.Databases[databaseName];
Table tb = db.Tables[tableName];
//初始化脚本生成器
Scripter scripter = new Scripter(server);
//下面这些是可选项:作用是向脚本生成器中添加需要生成的脚本内容
//ScripOption类的属性:/zh-cn/library/microsoft.sqlserver.management.smo.scriptingoptions.aspx
scripter.Options.Add(ScriptOption.DriAllConstraints);
//DriAllConstraints 获取或设置布尔属性值,指定是否所有声明的参照完整性约束包含在生成的脚本。
scripter.Options.Add(ScriptOption.DriAllKeys);
//DriAllKeys 获取或设置布尔属性值指定的依赖关系是否生成的脚本中定义的所有声明的参照完整性密钥。
scripter.Options.Add(ScriptOption.Default);
//Default 获取或设置布尔属性值指定创建所引用对象是否包含在生成的脚本。
scripter.Options.Add(ScriptOption.ContinueScriptingOnError);
//ContinueScriptingOnError 获取或设置布尔属性值指定的脚本是否继续操作时遇到错误后。
scripter.Options.Add(ScriptOption.ConvertUserDefinedDataTypesToBaseType);
//ConvertUserDefinedDataTypesToBaseType 获取或设置布尔属性值指定是否将用户定义的数据类型转换成最合适的SQL Server基本数据类型生成的脚本中。
scripter.Options.Add(ScriptOption.IncludeIfNotExists);
// IncludeIfNotExists 获取或设置一个布尔属性值,指定包括它在脚本之前,是否检查一个对象是否存在。
scripter.Options.Add(ScriptOption.ExtendedProperties);
//声明统一资源名称集合对象
UrnCollection collection = new UrnCollection();
//The UrnCollection class represents a collection of Urn objects that represent Uniform Resource Name (URN) addresses.
collection.Add(tb.Urn);
//声明字符串集合对象:存储collection中的所有string对象(在这里其中有3个string对象)
StringCollection sqls = scripter.Script(collection);
StringBuilder sb = new StringBuilder();
//遍历字符串集合对象sqls中的string对象,选择要输出的脚本语句:
foreach (string s in sqls)
sb.Append(s).Append("rnGOrnrn");
return sb.ToString();
//System.Collections.Specialized.StringCollection sc = tb.Script();
//foreach (String s in sc)
// this.richTextBox1.Text +=
catch (Exception ex)
Disconnect();
/// &summary&
/// 遍历数据表依赖的数据库对象
/// &/summary&
/// &returns&&/returns&
public List&string& WalkDependency()
List&string& ls =
if (databaseName == null || databaseName.Trim() == string.Empty)
throw new ArgumentNullException("databaseName");
if (tableName == null || tableName.Trim() == string.Empty)
throw new ArgumentNullException("tableName");
Connect();
ls = new List&string&();
// Reference the database.
Database db = server.Databases[databaseName];
Table tb = db.Tables[tableName];
// Define a Scripter object and set the required scripting options.
Scripter scrp = new Scripter(server);
scrp.Options.ScriptDrops =
scrp.Options.WithDependencies =
scrp.Options.Indexes = // To include indexes
scrp.Options.DriAllConstraints = // to include referential constraints in the script
// check if the table is not a system table
if (tb.IsSystemObject == false)
// Generating script for table tb
StringCollection sc = scrp.Script(new Urn[] { tb.Urn });
foreach (string st in sc)
ls.Add(st);
catch (Exception ex)
Disconnect();
/// &summary&
/// 本地复制数据库
/// &/summary&
/// &param name="distinationDBName"&复制到的数据库名&/param&
public void CopyDBonLocal(string distinationDBName)
if (databaseName == null || databaseName.Trim() == string.Empty)
throw new ArgumentNullException("databaseName");
if (tableName == null || tableName.Trim() == string.Empty)
throw new ArgumentNullException("tableName");
Connect();
//Reference the AdventureWorks2012 database
db = server.Databases[databaseName];
//Create a new database that is to be destination database.
Database dbC
dbCopy = new Database(server, distinationDBName);
dbCopy.Create();
//Define a Transfer object and set the required options and properties.
xfr = new Transfer(db);
xfr.CopyAllTables =
xfr.Options.WithDependencies =
xfr.Options.ContinueScriptingOnError =
xfr.DestinationDatabase = distinationDBN
xfr.DestinationServer = server.N
xfr.DestinationLoginSecure =
xfr.CopySchema =
//Script the transfer. Alternatively perform immediate data transfer
// with TransferData method.
xfr.ScriptTransfer();
catch (Exception ex)
Disconnect();
/// &summary&
/// 执行SQL脚本
/// &/summary&
/// &param name="script"&SQL脚本&/param&
public void ExecuteSQL(string script)
Connect();
server.ConnectionContext.ExecuteNonQuery(script);
catch (Exception ex)
Disconnect();
/// &summary&
/// 执行SQL脚本文件
/// &/summary&
/// &param name="scriptFile"&SQL脚本文件&/param&
public void ExecuteSQLFile(string scriptFile)
if (scriptFile == null || scriptFile.Trim() == string.Empty)
throw new ArgumentNullException("scriptFile");
if (!File.Exists(scriptFile))
throw new InvalidArgumentException(scriptFile);
Connect();
string script = File.ReadAllText(scriptFile);
server.ConnectionContext.ExecuteNonQuery(script);
catch (Exception ex)
Disconnect();
/// &summary&
/// 清空数据表
/// &/summary&
/// &param name="tableNames"&数据表数组&/param&
public void TrancateData(params String[] tableNames)
StringBuilder sqlScript = new StringBuilder();
sqlScript.AppendFormat("USE {0};", databaseName);
sqlScript.AppendLine();
foreach (String tableName in tableNames)
sqlScript.AppendFormat("TRUNCATE TABLE {0}", tableName);
sqlScript.AppendLine();
ExecuteSQL(sqlScript.ToString());
catch (Exception ex)
Disconnect();
/// &summary&
/// 清空数据库中所有的表
/// &/summary&
public void TruncateDatabase()
Connect();
Database db = new Database(server, databaseName);
if (db == null)
throw new Exception("Specified Database not found the server"+ server.Name);
List&String& tables = new List&string&();
foreach (Table dataTable in db.Tables)
tables.Add(dataTable.Name);
TrancateData(tables.ToArray());
catch (Exception ex)
Disconnect();
/// &summary&
/// 数据库复制删除
/// &/summary&
/// &param name="destinationDataBase"&目标数据库&/param&
public void CopyDelDB(string destinationDataBase)
Connect();
Database dbSource = server.Databases[databaseName];
//看是否数据库已经存在
if (dbSource != null)
Database dbDestination = server.Databases[destinationDataBase];
if (dbDestination == null || dbSource == null)
throw new Exception("Specified Database not found the server"+ server.Name);
StringBuilder sqlScript = new StringBuilder("");
sqlScript.AppendLine("USE"+ destinationDataBase +";");
foreach (Table dataTable in dbSource.Tables)
if (!dbDestination.Tables.Contains(dataTable.Name, dataTable.Schema))
sqlScript.AppendFormat("INSERT INTO {0} n SELECT * FROM {0}", dataTable.Name);
sqlScript.AppendLine();
dbDestination.ExecuteNonQuery(sqlScript.ToString());
throw new InvalidDataException("databaseName");
catch (Exception ex)
Disconnect();
/// &summary&
/// 效验数据库备份文件
/// &/summary&
/// &param name="Message"&效验结果消息&/param&
/// &returns&效验结论&/returns&
public bool VerifyingBackups(out string Message)
if (!Directory.Exists(backupPath))
throw new InvalidArgumentException(backupPath);
if (backupPath[backupPath.Length - 1] != '\')
backupPath += '\';
Connect();
Restore res = new Restore();
res.Devices.AddDevice(backupPath + databaseName +".bak", DeviceType.File);
return res.SqlVerify(server, out Message);
catch (Exception ex)
Disconnect();
/// &summary&
/// 分离数据库
/// &/summary&
public void DetachDatabase()
Connect();
//test为数据库的名称
Database currentDb = server.Databases[databaseName];
//看是否数据库已经存在
if (currentDb != null)
server.ConnectionContext.SqlConnectionObject.ChangeDatabase(databaseName);
server.KillAllProcesses(databaseName);
currentDb.DatabaseOptions.UserAccess = DatabaseUserAccess.S
currentDb.Alter(TerminationClause.RollbackTransactionsImmediately);
server.DetachDatabase(databaseName, true);
throw new InvalidDataException("databaseName");
catch (Exception ex)
Disconnect();
/// &summary&
/// 附加数据库
/// 注意:如果数据库已经存在,附加将失败
/// &/summary&
/// &param name="owner"&数据库所有者&/param&
public void AttachDatabase(string owner)
Connect();
if (Path == null || Path.Trim() == string.Empty)
throw new ArgumentNullException("Path");
if (!Directory.Exists(Path))
throw new InvalidArgumentException(Path);
if (Path[Path.Length - 1] != '\')
Path += '\';
StringCollection files = new StringCollection();
Database currentDb = server.Databases[databaseName];
if (currentDb == null)
//主文件是必须的
//文件名、文件后缀的大小写无所谓,即实际文件是Over.Mdf但这里指定成over.mdf也没有关系
files.Add(Path + databaseName +".mdf");
//log可以不设置string.Format(@"{0}{1}_Log.ldf", Path, databaseName)
files.Add(Path + databaseName +"_log.ldf");
//AttachDatabase(数据库名称,附加数据库文件路径,数据库所有者,AttachOptions选项)
//第三个设置了不起作用!附加后的数据库显示所有者为Connection中连接用户为所有者tj
server.AttachDatabase(databaseName, files, owner, AttachOptions.None);
throw new InvalidDataException("databaseName");
catch (Exception ex)
Disconnect();
/// &summary&
/// 收缩数据库
/// &/summary&
public void ShrinkDB()
Connect();
Database db = server.Databases[databaseName];
if (db != null)
//Shrink the database without truncating the log.
db.Shrink(20, ShrinkMethod.NoTruncate);
//Truncate the log.
db.TruncateLog();
throw new InvalidDataException("databaseName");
catch (Exception ex)
Disconnect();
/// &summary&
/// 更新数据库索引统计信息
/// &/summary&
public void UpdateIndexStatistics()
Connect();
Database db = server.Databases[databaseName];
if (db != null)
db.UpdateIndexStatistics();
throw new InvalidDataException("databaseName");
catch (Exception ex)
Disconnect();
用户评论(0)
开发技术学习小组列表
PHP开发框架
缓存Memcache
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
手机客户端
ThinkSAAS接收任何功能的Iphone(IOS)和Android手机的客户端定制开发服务
让ThinkSAAS更好,把建议拿来。

我要回帖

更多关于 localhost怎么查看 的文章

 

随机推荐