更新StoredProcedure执行但DB未更新

时间:2016-02-23 08:31:04

标签: c# asp.net sql-server data-binding devexpress

我已经搜索了一段时间并尝试了所有不同的解决方案,但我似乎无法更新数据库。

我已经通过SSMS自行执行了存储过程,并且工作正常。

这是我的asp设置:

<asp:SqlDataSource ID="SqlDataSource5" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" UpdateCommand="spProofStamp" UpdateCommandType="StoredProcedure">
    <UpdateParameters>
        <asp:Parameter Name="sID" Type="String" />
        <asp:Parameter Name="UserID" Type="String" />
    </UpdateParameters>
</asp:SqlDataSource>

按钮:

<dx:LayoutItem Caption="">
    <LayoutItemNestedControlCollection>
        <dx:LayoutItemNestedControlContainer ID="LayoutItemNestedControlContainer1" runat="server">
            <dx:ASPxButton ID="ASPxFormLayout2_E2" OnClick="Button1_Click" runat="server" Text="Validate" AutoPostBack="false">
                <ClientSideEvents Click="function(s,e){validate();}" />

            </dx:ASPxButton>
        </dx:LayoutItemNestedControlContainer>
    </LayoutItemNestedControlCollection>
</dx:LayoutItem>

我的代码背后(我已尝试过数据绑定并单独更新)。

我还追踪了这些值,他们都在那里,我怎么知道Update / DataBind是否有效?我的代码中的其他数据绑定工作正常:

protected void Button1_Click(object sender, EventArgs e)
{
    SqlDataSource5.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure;
    SqlDataSource5.UpdateCommand = "spProofStamp";
    SqlDataSource5.UpdateParameters["sID"].DefaultValue = selectedValue;
    SqlDataSource5.UpdateParameters["UserID"].DefaultValue = login.ToUpper();
    SqlDataSource5.Update();
    SqlDataSource5.DataBind();
}

StoredProcedure的:

ALTER PROCEDURE [dbo].[spProofStamp]
@UserID nvarchar(15),
@sID nvarchar(15)
AS
SET NOCOUNT ON
UPDATE [dbo].[ORDER]

SET [USERID] = @UserID,
    [DATE] = CURRENT_TIMESTAMP

WHERE ID = @sID

1 个答案:

答案 0 :(得分:1)

我建议您将方法从sqldatasource更改为代码隐藏,因为它可以使您的代码更清晰,更有效。

您可以使用下一种方法:

protected void UpdateDB(string user_id, string sid){
    SqlConnection con = new SqlConnection(your_connection_string);
    SqlCommand cmd = new SqlCommand("spProofStamp", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@USERID", SqlDbType.NVarChar).Value = user_id;
    cmd.Parameters.Add("@SID", SqlDbType.NVarChar).Value = sid;

    try{
        con.Open();
        cmd.ExecuteNonQuery();
    }
    catch(Exception ex){
        //process your exception
    }
    finally{
        con.Close();
        Response.Redirect(Request.Url.AbsoluteUri); //refresh this page
    }
}

并致电您的方法:

UpdateDB(login.ToUpper(), selectedValue);