2013-03-19 86 views
0

我有一个aspx以下HTML,所以它已经是一种形式: -文本框不发送输入的值

<asp:TextBox ID="Name" runat="server" MaxLength="50" Width="175px"></asp:TextBox> 

我有一个按钮: -

<asp:Button ID="updateDetails" Text="Update Details" runat="server" OnClick="updateDetails_Click" /> 

在背后我的代码有updateDetails_Click PROC: -

protected void updateDetails_Click(object sender, EventArgs e) 
{ 
    utils utils = new utils(); 
    string connectionString = ConfigurationManager.ConnectionStrings[utils.liveTest() + "arenadestinationsConnectionString"].ToString(); 

    string SQL = "UPDATE Users SET " 
       + "Name = @Name, "        
       + "WHERE IdUser = @iDUser"; 

    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     SqlCommand command = new SqlCommand(SQL, connection); 

     command.Parameters.AddWithValue("@Name", Name.Text); 
     command.Parameters.AddWithValue("@iDUser", Session["loggedIn"].ToString()); 

     try 
     { 
      connection.Open(); 
      command.ExecuteReader(); 
     } 
     catch 
     { 

     } 
     finally 
     { 
      connection.Close(); 
     } 
    } 
} 

如果我输入了新文本名称的文本框,当我点击更新详细信息按钮,名称.Text总是显示原始文本,而不是修改后的文本。

我在做什么错?我把自己从VB转换到C#,所以我毫无疑问会学习一些技巧。

+0

尝试存储会话中的值或检查ViewState的,如果它的启用还你在做任何' IsPostBack'检查不良实践忽略了AddWithValues中的@ @你认为这些参数在SQL中被引用/声明了吗?用'@'符号还有你的SqlDataReader对象在哪里? – MethodMan 2013-03-19 16:12:32

+0

不执行任何IsPostback检查。 ViewState默认启用。 – Craig 2013-03-19 16:53:11

+0

我相信下面提供的答案应该可以回答/解决您对上一个问题的回应有点迟的问题.. – MethodMan 2013-03-19 16:56:30

回答

4

不能更新调用ExecuteReader,因为这是任何记录SELECT语句(读取数据)。如果你想更新数据库中的数据,你必须调用ExecuteNonQuery

因此改变你的代码:

command.ExecuteNonQuery(); 
+0

更改为command.ExecuteNonQuery();谢谢。但是,AddWithValue Name.Text中的数据仍然是来自页面加载的原始数据。它没有提供任何输入到框中的更改,这是问题的症结所在。 – Craig 2013-03-19 16:50:15

+0

@Craig你确定你没有在Page_Load中重置这个值吗?你忘了添加'if(!IsPostBack)\\设置控制文本'也许? – Icarus 2013-03-19 16:52:10

+0

伊卡洛斯我爱你!文本在按钮功能运行之前正在设置。非常感谢。希望这可以帮助别人。 – Craig 2013-03-19 17:10:57

3

变化:

command.ExecuteReader(); 

command.ExecuteNonQuery(); // This is for insert, update, delete 

,你可以离开了在@

command.Parameters.AddWithValue("Name", Name.Text); 
    command.Parameters.AddWithValue("iDUser", Session["loggedIn"].ToString());