Search code examples
c#sqlsql-serverdatabasesmo

How to set owner of existing SQL Server database


I'm trying to set a SQL Server database owner using C# and SMO. If the database does not exist, I can assign its owner. But if I want to set the owner of an existing database, I get an error.

Working code for new database:

Server server = new Server("WINSERVER\\SQLEXPR");
server.ConnectionContext.LoginSecure = true;
Database database = new Database(server, "MyDatabase");
db.Create();

database.SetOwner("SOMEOWNER", true)
database.Refresh();

Not working code for an existing database:

Server server = new Server("WINSERVER\\SQLEXPR");
server.ConnectionContext.LoginSecure = true;
Database database = new Database(server, "MyDatabase");

database.SetOwner("SOMEOWNER", true)
database.Refresh();

Error:

Microsoft.SqlServer.Management.Smo.InvalidSmoOperationException: You cannot execute this operation since the object has not benn created.


Solution

  • Server server = new Server("WINSERVER\\SQLEXPR");
    server.ConnectionContext.LoginSecure = true;
    
    // changed line below
    Database database = server.Databases["MyDatabase"];
    
    database.SetOwner("SOMEOWNER", true)
    database.Refresh();
    

    No need to create a new Database object, just pull it from the database collection on the server already.