SharePoint Web部件 - 存储过程中的RAISERROR导致403

时间:2013-06-25 08:45:23

标签: c# asp.net sql-server tsql sharepoint-2010

我有一个调用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;
    }

1 个答案:

答案 0 :(得分:0)

如果它工作,管理员为什么不升级

spsecurity.runwithelevatedprivileges(委托() {

errorMessage = DataAccess.UpdateSomeValue(strSomeValue);

});