我的分离代码是对的吗?

时间:2012-02-13 14:51:32

标签: sql-server vb.net

我正在使用以下代码从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()

3 个答案:

答案 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)

  1. 您的ConnectionString点已经到Master数据库,因此您无需指定它。

    EXEC [dbo].[sp_detach_db] @dbname = N'MyHomeDBTestPWD'
    
  2. 如果要指定数据库,则应执行此操作

    EXEC [master].[dbo].[sp_detach_db] @dbname = N'MyHomeDBTestPWD'
    
  3. 你错了CommandType。如果要执行代码,请将其更改为CommandType.Text

  4. 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);

http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.server.detachdatabase.aspx