2013-07-04 2 views
0

Я пытаюсь обновить таблицу на сервере sql, но она не работает. Вот мой кодПопытка обновить таблицу на сервере sql, но не работает

SqlConnection conn; 
    string connString = ConfigurationManager.ConnectionStrings["Alumnidb"].ConnectionString; 
    string userName; 
    SqlCommand cmdProfile, cmdUpdate; 
    SqlDataReader reader; 
    string UserId; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     userName = Request.QueryString["UserName"].ToString(); 

     RetriveProfile(); 
    } 

    protected void RetriveProfile() 
    { 
     conn = new SqlConnection(connString); 
     cmdProfile = new SqlCommand("SELECT Name, UserId FROM UserProfile WHERE [email protected]",conn); 
     cmdProfile.Parameters.AddWithValue("@UserName",userName); 
     conn.Open(); 
     reader = cmdProfile.ExecuteReader(); 
     while (reader.Read()) 
     { 
      TextBoxName.Text = reader["Name"].ToString(); 
      UserId = reader["UserId"].ToString(); 
     } 
     conn.Close(); 
    } 
    protected void buttonUpdate_Click(object sender, EventArgs e) 
    { 
     conn = new SqlConnection(connString); 
     cmdUpdate = new SqlCommand("UPDATE UserProfile SET [email protected] WHERE [email protected]",conn); 
     cmdUpdate.Parameters.AddWithValue("@UserId",UserId); 
     cmdUpdate.Parameters.AddWithValue("@Name",TextBoxName.Text.ToString()); 
     conn.Open(); 
     cmdUpdate.ExecuteScalar(); 

     conn.Close(); 

    } 

и .aspx файл

Name: <asp:TextBox ID="TextBoxName" runat="server" ></asp:TextBox> 

<asp:Button ID="buttonUpdate" runat="server" Text="UpDate" 
     onclick="buttonUpdate_Click"/> 

Это показывает мне предыдущее значение, как и раньше обновляется. , я проверил в sql-сервере, и там также нет изменений Что я делаю неправильно? Ваша помощь будет оценена. , .Thanx

+2

Try 'cmdUpdate.ExecuteNonQuery();' ' – Tim

+0

userName' получает значение правильно? – PiLHA

+0

Пробовал, но все тот же результат – user2517610

ответ

1

Проблема в том, что вы заполняете все значения в Page_Load, даже если вы находитесь в обратной передаче. Поэтому, если пользователь нажимает кнопку обновления Page_Load, сначала запускается, все значения загружаются из базы данных, а значение TextBox.Text - старое значение. Таким образом, все изменения теряются.

Так используйте IsPostBack свойство:

protected void Page_Load(object sender, EventArgs e) 
{ 
    userName = Request.QueryString["UserName"].ToString(); 
    if(!IsPostBack) 
     RetriveProfile(); 
} 

Поскольку вы получаете UserID из запроса SQL, и вам необходимо, что в обновлении у вас есть несколько вариантов. Вы можете сохранить идентификатор пользователя через обратную передачу, например. в ViewState или Session. Это можно сделать в RetriveProfile.

protected void RetriveProfile() 
{ 
    conn = new SqlConnection(connString); 
    cmdProfile = new SqlCommand("SELECT Name, UserId FROM UserProfile WHERE [email protected]",conn); 
    cmdProfile.Parameters.AddWithValue("@UserName",userName); 
    conn.Open(); 
    reader = cmdProfile.ExecuteReader(); 
    while (reader.Read()) 
    { 
     TextBoxName.Text = reader["Name"].ToString(); 
     UserId = reader["UserId"].ToString(); 
    } 
    conn.Close(); 
} 

Измените значение в поле UserID быть свойством:

private string UserId { 
    get { return (string)ViewState["UserID"]; } 
    set { ViewState["UserID"] = value;} 
} 

Обратите внимание, что все переменные расположены в конце жизненного цикла каждой страницы из-за безгражданства HTTP. Поэтому вам нужно где-то упорствовать.

Nine options for managing persistent User State in your ASP.NET Application

+0

Параметрированный запрос '(@UserId nvarchar (4000), @ Name nvarchar (10)) UPDATE UserProfile SE' ожидает параметр '@UserId', который не был указан , Дает эту ошибку – user2517610

+0

вы можете получить значение @userid в методе обновления, я думаю, что его null там –

+0

@ user2517610: Поскольку вы получаете 'UserID' из SQL-запроса, у вас есть несколько вариантов. Вы можете сохранить идентификатор пользователя через обратную передачу, например. в ViewState или Session. Это можно сделать в 'RetriveProfile'. –

Смежные вопросы