C# 使用smo在SqlServer中创建用户时出现问题
1) 如果已经有一个登录名“user1”,那么我通过调用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
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
- 发布提交
- 创建数据库登录