存储过程不更新记录
本文关键字:新记录 更新 存储过程 | 更新日期: 2023-09-27 18:00:31
我有一个c#函数,它用输入参数调用SQL Server存储过程。当直接通过SQL Server Management Studio执行存储过程时,该存储过程运行良好,因此我认为问题一定在c#方面,但我一辈子都无法解决。我已经为其他人搜索了以前出现此问题的所有时间,但一直找不到解决方案。如果最终无法确定出了什么问题,我们将非常感谢一些调试技巧,因为我不太擅长更高级的故障排除。
这是c#函数:
protected void UpdateProfile(object sender, EventArgs e)
{
string connstring = ConfigurationManager.ConnectionStrings["TimeHubDBCS"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connstring))
{
try
{
SqlCommand cmd = new SqlCommand("spUpdateProfile", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("@UserId", SqlDbType.VarChar).Value = userloggedin.Text;
cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = first_name.Text;
cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = last_name.Text;
cmd.Parameters.Add("@MiddleInitial", SqlDbType.VarChar).Value = middle_initial.Text;
cmd.Parameters.Add("@Assignment", SqlDbType.VarChar).Value = ddl_assignment.Text;
cmd.Parameters.Add("@Rank", SqlDbType.VarChar).Value = rank.Text;
cmd.Parameters.Add("@Star", SqlDbType.VarChar).Value = star.Text;
cmd.Parameters.Add("@ContactPhone", SqlDbType.VarChar).Value = contact_phone.Text;
cmd.Parameters.Add("@PhoneType", SqlDbType.VarChar).Value = phone_type.Text;
cmd.Parameters.Add("@Email", SqlDbType.VarChar).Value = email.Text;
cmd.Parameters.Add("@Shift", SqlDbType.VarChar).Value = ddl_shift.Text;
cmd.Parameters.Add("@ModifyDate", SqlDbType.VarChar).Value = DateTime.Now.ToString();
cmd.Parameters.Add("@ModifiedBy", SqlDbType.VarChar).Value = userloggedin.Text;
cmd.Parameters.Add("@StatusId", SqlDbType.VarChar).Value = "active";
conn.Open();
cmd.ExecuteNonQuery();
Response.Write("Profile updated successfully!");
}
catch (Exception ex)
{
Response.Write("Profile update error: " + ex.Message);
}
}
}
以下是sql server存储过程:
ALTER PROCEDURE spUpdateProfile
@UserId VARCHAR(200) = NULL ,
@FirstName VARCHAR(200) = NULL ,
@LastName VARCHAR(200) = NULL ,
@MiddleInitial VARCHAR(200) = NULL ,
@Assignment VARCHAR(200) = NULL ,
@Rank VARCHAR(200) = NULL ,
@Star VARCHAR(200) = NULL ,
@ContactPhone VARCHAR(200) = NULL ,
@PhoneType VARCHAR(200) = NULL ,
@Email VARCHAR(200) = NULL ,
@Shift VARCHAR(200) = NULL ,
@ModifyDate VARCHAR(200) = NULL ,
@ModifiedBy VARCHAR(200) = NULL ,
@StatusId VARCHAR(200) = NULL
AS
BEGIN
UPDATE dbo.users
SET
first_name = @FirstName ,
last_name = @LastName ,
middle_initial = @MiddleInitial ,
assignment = @Assignment ,
user_rank = @Rank ,
user_star = @Star ,
contact_phone = @ContactPhone ,
phone_type = @PhoneType ,
email = @Email ,
regular_shift = @Shift ,
modify_date = @ModifyDate ,
modified_by = @ModifiedBy ,
status_id = @StatusId
WHERE
user_id = @UserId
END
您的描述缺少故障排除代码中的一个关键因素。错误究竟是什么?如果你不能识别错误,你就不能真正开始排除故障。
在捕获上设置一个断点并尝试运行它。当它停止在该断点时,查看异常和异常的堆栈跟踪。它通常会告诉你为什么失败。此外,您可以在过程的顶部放置一个断点,然后将鼠标悬停在每个变量上,看看它们是否都存在。可能有一个丢失或数据类型不正确。
Partha在原帖子的评论部分回答了这个问题。
问题是我有一个函数,它用page_load上的用户数据填充页面上的文本框。每次运行update函数时,页面都会发布回服务器,并再次触发page_load事件,用原始数据重新填充文本框,然后使用该数据更新表中的记录。
在pag_load事件中的函数周围添加if(!Page.ipostback){function}解决了这个问题,只在第一次加载页面时填充这些字段,而不是在刷新/回发时填充