C# 将数据库附加到SQL Server 2012失败
我已经在我的桌面上安装了MSSQLServer2012,并试图编写一个c#程序 在执行抛出的程序错误消息时,将DB文件附加到SQL Server 2012 正如下面提到的,你能帮我解决这个问题吗 下面是MS SQL Server 2012引发的错误消息 数据库文件(mdf和ldf) 使用以下代码: 方法:C# 将数据库附加到SQL Server 2012失败,c#,sql-server,C#,Sql Server,我已经在我的桌面上安装了MSSQLServer2012,并试图编写一个c#程序 在执行抛出的程序错误消息时,将DB文件附加到SQL Server 2012 正如下面提到的,你能帮我解决这个问题吗 下面是MS SQL Server 2012引发的错误消息 数据库文件(mdf和ldf) 使用以下代码: 方法: AttachDb("sqlDb","[C:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\sqlDb.mdf] [C:Microsof
AttachDb("sqlDb","[C:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\sqlDb.mdf] [C:Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\sqlDb_log.ldf]");
错误消息:
80131501 Error: An exception occurred while executing a Transact-SQL statement or batch.
From: Microsoft.SqlServer.ConnectionInfo
at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(StringCollection sqlCommands, ExecutionTypes executionType)
at Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(StringCollection queries)
at Microsoft.SqlServer.Management.Smo.Server.AttachDatabaseWorker(String name, StringCollection files, String owner, AttachOptions attachOptions)
at Microsoft.SqlServer.Management.Smo.Server.AttachDatabase(String name, StringCollection files)
80131500 Error: Attach database failed for Server 'sqlDbServer'.
From: Microsoft.SqlServer.Smo
at Microsoft.SqlServer.Management.Smo.Server.AttachDatabase(String name, StringCollection files)
at TestSMO.AttachDb(String dbname, String filelist)
代码:
通过向SQL server DB实例的NT AUTHORITY\SYSTEM登录提供所有服务器角色来解决问题。这是包括所有内部异常在内的完整异常吗?SQL Server通常会生成更好的消息。为什么在文件名周围放方括号?它们是字符串,不是标识符。嗨,usr,谢谢你的快速回复,给定的异常是来自ConsoleHi Aaron的“完全异常”,谢谢你的快速回复,方括号帮助我分割mdf和ldf文件路径。给定的文件路径字符串arugument值为“[C:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\sqlDb.mdf][C:Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\sqlDb\u log.ldf]””。
static string instance = "";
static string username = "";
static string password = "";
static string connection_timeout = "600";
static string statement_timeout = "3600";
//create server connection object
static Server Connect()
{
ServerConnection conn = new ServerConnection();
instance="sqlDbServer";
if (instance.Length > 0)
conn.ServerInstance = instance;
if (username.Length > 0) {
conn.LoginSecure = false;
conn.Login = username;
conn.Password = password;
}
conn.ConnectTimeout = Convert.ToInt32(connection_timeout);
conn.StatementTimeout = Convert.ToInt32(statement_timeout);
return new Server(conn);
}
//performing attache DB
static void AttachDb(string dbname, string filelist)
{
string[] files = filelist.Split(new char[] {'['}, StringSplitOptions.RemoveEmptyEntries);
StringCollection dbfiles = new StringCollection();
foreach (string s in files) {
string s1 = s.TrimEnd(null);
s1 = s1.TrimEnd(']');
if (s1.Length > 0) dbfiles.Add(s1);
}
Server svr = Connect();
string name = DecodeString(dbname);
svr.AttachDatabase(name, dbfiles);
}