我正在测试连接字符串用户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异常。 对象引用未设置为对象的实例。
答案 0 :(得分:2)
您错过了ExecuteXXXXX
()方法。
con.Open();
cmd1.ExecuteNonQuery(); // cmd1.ExecuteScalar();
con.Close();
答案 1 :(得分:0)
在打开和关闭连接之间没有执行。