C# 使用smo在SqlServer中创建用户时出现问题

C# 使用smo在SqlServer中创建用户时出现问题,c#,sql-server,smo,C#,Sql Server,Smo,1) 如果已经有一个登录名“user1”,那么我通过调用CreateDatabaseUser函数为数据库“db1”创建一个用户“user1” 2) 否则,我使用CreateServerLogin创建一个登录名为“user1”,密码为“password1”,默认数据库为“db1”(仅在创建db1之后),然后使用CreateDatabaseUser为“db1”创建用户“user1” 方法(2)在 newUser.Create()在CreateDatabaseUser 正在说,Microsoft.Sq

1) 如果已经有一个登录名“user1”,那么我通过调用
CreateDatabaseUser
函数为数据库“db1”创建一个用户“user1”

2) 否则,我使用
CreateServerLogin
创建一个登录名为“user1”,密码为“password1”,默认数据库为“db1”(仅在创建db1之后),然后使用
CreateDatabaseUser
为“db1”创建用户“user1”

方法(2)在
newUser.Create()
CreateDatabaseUser

正在说,
Microsoft.SqlServer.Management.Smo.FailedOperationException:为用户“user1”创建失败。-->Microsoft.SqlServer.Management.Common.ExecutionFailureException:执行Transact-SQL语句或批处理时发生异常。-->System.Data.SqlClient.SqlException:“[user1]”不是有效的登录名,或者您没有权限

有什么问题吗



private static Login CreateServerLogin(Server server, string database, string login, string password)
{
    var newLogin = new Login(server, login)
                       {
                           LoginType = LoginType.SqlLogin,
                           DefaultDatabase = database,
                           PasswordPolicyEnforced = false
                       };

    newLogin.Create(password);

    return newLogin;
}

private static User CreateDatabaseUser(Database database, string user, string login)
{            
    var newUser = new User(database, user) { UserType = UserType.SqlLogin, Login = login };

    newUser.Create();
    newUser.AddToRole("db_owner");
    return newUser;
}


检查事务和批处理

DDL语句还支持事务,所以当您创建新用户并传递服务器登录时,服务器上可能没有这样的登录,因为之前的语句没有提交

此外,批处理关闭语句“GO”也会有所帮助


先试试:

  • CreateServerLogin

  • 发行GO

  • 创建数据库登录

  • 发布提交


如果失败,请尝试以下逻辑:

  • CreateServerLogin

  • 发布提交

  • 创建数据库登录