0

接続文字列のユーザー ID が sys Admin であるかどうかを確認するテストを行っています。

しかし、ビットの値を返そうとするとコードが壊れ続けますか?

これを行うには、次のストアド プロシージャを使用します。

ALTER PROCEDURE [dbo].[CheckIfAdmin]
@SQLLoginName nvarchar(50),
@IsAdmin bit OUTPUT

As

SET @IsAdmin = IS_SRVROLEMEMBER('sysadmin', @SQLLoginName)

Print @IsAdmin
Select @IsAdmin

値を取得するには、次の C# コードを使用します。

public bool CheckIfIsAdmin(string procedure, SqlParameter[] parameters)
        {
            try
            {
                SqlCommand cmd1 = new SqlCommand(procedure, con);
                cmd1.CommandType = CommandType.StoredProcedure;
                foreach (SqlParameter p in parameters)
                {
                    cmd1.Parameters.Add(p);
                }
                SqlParameter IsAdmin = new SqlParameter("@IsAdmin", SqlDbType.Bit);
                IsAdmin.Direction = ParameterDirection.Output;
                cmd1.Parameters.Add(IsAdmin);
                con.Open();      
                con.Close();             
                MessageBox.Show("Is a admin = " + IsAdmin.Value.ToString()); // this should display 1 or 0 
                return ture
            }
            catch (Exception ex)
            {
                MessageBox.Show("" + ex);
                return false;            
            }
        }

エラーメッセージ:

NullReference 例外がキャッチされました。オブジェクト参照がオブジェクト インスタンスに設定されていません。

4

2 に答える 2

2

ExecuteXXXXX() メソッドを見逃しています。

 con.Open();      
 cmd1.ExecuteNonQuery(); // cmd1.ExecuteScalar();
 con.Close(); 
于 2012-07-02T06:41:30.973 に答える
0

接続の開始と終了の間に実行しませんでした。

于 2012-07-02T06:41:44.630 に答える