我的分离代码是否正确?
问题描述:
我正在使用以下代码从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()
答
您assiging这种错误的方式。当您只需添加存储过程名称时,您正在分配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
答
-
你
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()
答
您更好地使用Microsoft.SqlServer.Smo
命名空间包含所有你需要与数据库工作。 有附加的特定方法/分离数据库
Server mServer = new Server(".");
mServer.KillAllProcesses("attach1");
mServer.DetachDatabase("attach1", true);
非常感谢!您是否也可以像上面所做的那样为我写备份和恢复代码?我会非常感谢你。 – 2012-02-13 15:08:28
为了备份数据库,您需要使用'CommandType.Text'并自己指定SQL语句。这是MSDN上的备份页面。 http://msdn.microsoft.com/en-us/library/ms187510.aspx – 2012-02-13 15:10:34
相同的'RESTORE' http://msdn.microsoft.com/en-us/library/ms186858.aspx – 2012-02-13 15:11:24