我正在使用以下代码从SQL Server express中分离我的数据库。请告知是否有问题。我收到了错误。
"Could not locate entry in sysdatabases for database 'EXEC master'. No entry found with that name. Make sure that the name is entered correctly."
我正在使用的代码是
Dim conn2 As New SqlConnection("Server=MyHomeServer\SQLExpress;Database=master;Trusted_Connection=False;User ID=sa;Password=abc123;")
Dim cmd2 As New SqlCommand("", conn2)
cmd2.CommandType = CommandType.StoredProcedure
cmd2.CommandText = "EXEC master.dbo.sp_detach_db @dbname = N'MyHomeDBTestPWD'"
conn2.Open()
cmd2.Connection = conn2
cmd2.ExecuteNonQuery()
答案 0 :(得分:1)
你指的是错误的方式。当您只需添加存储过程名称时,您将在CommandText
中分配正确的SQL语句。然后,您需要向Parameter
添加SqlCommand
。
Dim cmd2 As New SqlCommand("", conn2)
cmd2.CommandType = CommandType.StoredProcedure
cmd2.CommandText = "sp_detach_db"
cmd2.Parameters.AddWithValue("@dbname", "MyHomeDBTestPWD")
cmd2.ExecuteNonQuery()
如果您想要执行SQL语句,则只需将CommandType
更改为CommandType.Text
答案 1 :(得分:1)
您的ConnectionString
点已经到Master
数据库,因此您无需指定它。
EXEC [dbo].[sp_detach_db] @dbname = N'MyHomeDBTestPWD'
如果要指定数据库,则应执行此操作
EXEC [master].[dbo].[sp_detach_db] @dbname = N'MyHomeDBTestPWD'
你错了CommandType
。如果要执行代码,请将其更改为CommandType.Text
。
CommandType.Text解决方案
Dim cmd2 As New SqlCommand("", conn2)
cmd2.CommandType = CommandType.Text
cmd2.CommandText = "EXEC [dbo].[sp_detach_db] @dbname = 'MyHomeDBTestPWD'"
cmd2.ExecuteNonQuery()
CommandType.StoredProcedure解决方案
Dim cmd2 As New SqlCommand("", conn2)
cmd2.CommandType = CommandType.StoredProcedure
cmd2.CommandText = "[dbo].[sp_detach_db]"
cmd2.Parameters.AddWithValue("@dbname", "MyHomeDBTestPWD")
cmd2.ExecuteNonQuery()
答案 2 :(得分:0)
最好使用Microsoft.SqlServer.Smo
命名空间,其中包含使用数据库所需的全部内容。
附加/分离数据库有一个特定的方法
Server mServer = new Server(".");
mServer.KillAllProcesses("attach1");
mServer.DetachDatabase("attach1", true);