2010-08-19 89 views
4

1)如果已經有一個登錄「用戶1」,那麼我通過調用CreateDatabaseUser函數問題在使用SMO

2創建爲數據庫「DB1」用戶「USER1」)否則在SqlServer的創建用戶,創建一個方法(2)使用CreateServerLogin創建用戶'user1'作爲'db1'使用CreateDatabaseUser

方法(2)拋出一個異常在 newUser.Create(); in CreateDatabaseUser

說,Microsoft.SqlServer.Management.Smo.FailedOperationException: Create failed for User 'user1'. ---> Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. --- > System.Data.SqlClient.SqlException: '[user1]' is not a valid login or you do not have permission.

可能是什麼問題?



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; 
} 

回答

0

檢查交易和批次。

DDL語句也支持事務,因此當您創建新用戶並通過服務器登錄時,服務器上可能沒有此類登錄,因爲以前的語句未提交。

還有一批親密聲明 「GO」 將有助於


先嚐試:

  • CreateServerLogin

  • 問題GO

  • CreateDBLogin

  • 問題COMMIT


如果失敗嘗試這樣的邏輯:

  • CreateServerLogin

  • 問題COMMIT

  • CreateDBLogin