クラス内で、正常に動作するSQLへのログインを作成しています。ログインが SQL に既に存在するかどうかを最初に確認するために、少しエラー チェックを追加したかったのです。その場合は、ログインを追加しようとせずに、テーブルなどにマップします。
SQLでは、次を使用してログインを確認します。
select name from sys.server_principals where name = 'viewer2'
次のようにクラスでこれを使用するのにうんざりしました
protected static bool CheckForExistingUser(DbContext context, string userName)
{
string checkForUser =
@" SET NOCOUNT ON
DECLARE @userName AS nvarchar(max) = {0}
EXEC('
SELECT name FROM sys.server_principals where name = ['+ @userName +']
')";
return Convert.ToBoolean(context.Database.ExecuteSqlCommand(checkForUser, userName));
}
ただし、このメソッドを呼び出すと、列 (渡されたユーザー名) が無効であるという例外が発生します。
$exception {"Invalid column name 'viewer2'."} System.Exception {System.Data.SqlClient.SqlException}
これを引き起こしている原因についてのアイデアはありますか?コードからSQLデータベース内にログインが存在するかどうかを確認するより良い方法はありますか?
乾杯