【发布时间】:2013-04-26 19:25:44
【问题描述】:
不知何故,我的一个存储过程刚刚停止从 aspx 页面执行。如果我使用EXEC 从 SQL Server 运行它,它就可以工作。但是,当我单击我的 aspx 页面上分配参数和值的按钮并启动此过程时,页面会重新加载但数据不会更新。此按钮可以运行创建或更新程序,具体取决于地址栏中的页面参数。但是什么都没有被执行。
在 aspx 页面中,我创建了这样的按钮:
<asp:Button id="btnSaveChanges" runat="server"
class="class_Button Normal Enabled"
OnClick="btnSaveChanges_Click" Text="Save changes" Width="100" />
然后在代码隐藏文件中:
protected void btnSaveChanges_Click(object s, EventArgs e)
{
//if (Page.IsValid)
//{
SqlCommand sqlComm1 = new SqlCommand();
SqlConnection sqlConn1 = new SqlConnection("Server=localhost\\SqlExpress;Database=TestDB;Integrated Security=true");
sqlConn1.Open();
if(param_id == 0)
{
sqlComm1 = new SqlCommand("dcspCreateEmpDetails", sqlConn1);
}
if(param_id > 0)
{
sqlComm1 = new SqlCommand("dcspUpdateEmpDetails", sqlConn1);
}
sqlComm1.CommandType = CommandType.StoredProcedure;
if (param_id > 0)
sqlComm1.Parameters.AddWithValue("@empID", param_id);
sqlComm1.Parameters.AddWithValue("@empName1", tbName1.Text);
sqlComm1.Parameters.AddWithValue("@empSurname", tbSurname.Text);
sqlComm1.Parameters.AddWithValue("@empBirthDate", Convert.ToDateTime(tbBirthDate.Text));
sqlComm1.ExecuteNonQuery();
//}
sqlConn1.Close();
}
就是这样。页面有效,100%。即使我删除验证检查,也没有结果。
程序如下:
CREATE PROCEDURE dcspUpdateEmpDetails
@empID int,
@empName1 nvarchar(50) = null,
@empSurname nvarchar(50) = null,
@empBirthDate datetime = null
AS
UPDATE Employees
SET
name_1 = @empName1,
surname = @empSurname,
date_of_birth = @empBirthDate
WHERE (employee_id = @empID)
希望你们能帮助我,伙计们。我真的不明白这东西是怎么回事……
主题更新:
检查我发现的调试消息,在OnClick 事件中的存储过程将此文本作为参数之前,该文本框会丢失其文本。
服务器首先恢复页面然后才执行OnClick事件中的代码真的正常吗?我认为这在逻辑上是不正确的,因为Page_Load 旨在加载默认页面,而按钮和其他控件用于更改和操作页面的内容。如果他们的代码不能及时执行,我为什么需要这些控件?
【问题讨论】:
-
这里有两个可能的存储过程,更新和创建。您是否已通过调试器中的代码来确保您期望执行的 SP 是实际执行的那个?另外,为什么不添加一个 try/catch 块并捕获任何异常?确定参数值好不好?
-
另外,
param_id是在哪里声明的? -
我在您的代码 sqlConn1.close 中发现的内容位于 if 语句之外,它在 if 块中声明。这将通过设计时错误..
-
如果备份副本有效,并且在功能上的所有地方都相同,那么您需要查看其他差异。听起来页面没有正确回发。
-
根据您的描述,听起来您正在重置
Page_Load事件中的控件。如果是这种情况,您需要将更新包装在if (!IsPostBack) { ... }块中。
标签: asp.net postback buttonclick