我有一个调用SQL Server存储过程的Web部件,当引发错误时,SharePoint页面应该通过标签显示错误消息。
但是,当存储过程中出现错误时,SharePoint页面会显示403错误。如果没有引发错误,页面将按预期运行。
此问题仅发生在标准用户(网站访问者)上,如果我以SharePoint管理员身份执行此代码,则一切正常,因此我猜测这是某些描述的权限问题。
有人可以帮忙吗?感谢。
SQL代码看起来像这样......
CREATE PROCEDURE dbo.SomeProcedure
(
@SomeValue INT
)
AS
IF EXISTS(SELECT 1 FROM dbo.SomeTable WHERE SomeColumn = @SomeValue)
BEGIN
RAISERROR('Already completed.', 16, 1);
RETURN;
END;
-- otherwise do something
使用C#代码,例如:
private void UpdateSomething()
{
string errorMessage;
errorMessage = DataAccess.UpdateSomeValue(strSomeValue);
if (string.IsNullOrEmpty(errorMessage))
{
lblInformationMessage.Text = "Update completed successfully.";
lblInformationMessage.Visible = true;
}
else
{
lblErrorMessage.Text = string.Concat("There was an error: ", errorMessage);
lblErrorMessage.Visible = true;
}
}
调用以下内容:
public static string UpdateSomeValue(string strSomeValue)
{
string errorMessage = "";
SqlConnection cnn;
SqlCommand cmd = new SqlCommand();
try
{
//connection
cnn = new SqlConnection(strCnn);
cnn.Open();
//command
cmd.Connection = cnn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "dbo.SomeProcedure";
cmd.Parameters.Add(new SqlParameter("@SomeValue", SqlDbType.Int, 18));
cmd.Parameters["@SomeValue"].Value = strSomeValue;
cmd.ExecuteNonQuery();
cnn.Close();
}
catch (SqlException ex)
{
errorMessage = ex.Message;
Utility.Writelog(HttpContext.Current.Request.Url.ToString());
Utility.Writelog(ex.Message);
}
finally
{
cmd.Dispose();
}
return errorMessage;
}
答案 0 :(得分:0)
如果它工作,管理员为什么不升级
spsecurity.runwithelevatedprivileges(委托() {
errorMessage = DataAccess.UpdateSomeValue(strSomeValue);
});