2013-05-02 27 views
0

不知何故,我的一个存储过程刚刚停止从aspx页面执行。如果我使用EXEC从SQL Server运行它,它将起作用。但是当我点击我的aspx页面上一个指定参数和值的按钮,并启动此过程时,页面将重新加载,但数据不会更新。此按钮可以运行创建或更新过程,具体取决于地址栏中的页面参数。但没有执行。如何在ASP.NET中获取文本框的值单击事件处理程序

在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用于加载默认页面,而按钮和其他控件用于更改和操作页面内容。如果他们的代码无法及时执行,为什么我需要这些控件?

+2

这里有两种可能的存储过程:更新和创建。你是否已经在调试器中加入了代码,以确保你期望执行的SP是实际执行的SP?另外,为什么不添加try/catch块并捕获任何异常?确保参数值良好? – Tim 2013-05-02 14:53:59

+0

另外,声明'param_id'在哪里? – Tim 2013-05-02 14:57:35

+0

好的,param_id在页面的公共部分类中声明。没关系,在调试模式下它有正确的值。但是我刚刚发现,在我的新文本传递给参数之前,文本框会恢复它们的文本。为什么?是因为回传?那我该如何保留它?为什么之前它工作? – SWA 2013-05-02 15:09:19

回答

0

好的,问题已解决。怎么样?我不知道。我拿着我的备份副本,并将关于此问题的所有内容复制到当前版本。这是完全相同的代码。我刚刚用备份中的相同代码替换了当前代码,现在它可以工作。那是什么?我100%知道它们之间没有区别,它只是一小段代码。

不幸的是,我不能标记任何答案,因为这里只有评论。我会标记这一个。

无论如何,谢谢你们。非常感谢蒂姆对他的一切关注以及理查德·迪明对他的建议的关注。

相关问题