更新存储过程执行但数据库未更新
Update StoredProcedure executes but DB not updated
我搜索了一段时间并尝试了所有不同的解决方案,但我似乎无法更新数据库。
我已经通过 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();
}
存储过程:
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
我建议您将方法从 sqldatasource 更改为 code behind,因为它使您的代码更清晰,更有效。
您可以使用下一个方法:
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);
我搜索了一段时间并尝试了所有不同的解决方案,但我似乎无法更新数据库。
我已经通过 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();
}
存储过程:
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
我建议您将方法从 sqldatasource 更改为 code behind,因为它使您的代码更清晰,更有效。
您可以使用下一个方法:
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);