2012-02-12 2 views
0

Я пытаюсь обновить записи в базе данных, но никаких изменений и сообщений об ошибках не производится. Я проверил синтаксис, значения, которые я отправляю, все просто отлично. любые предложения?ASP.NET: записи в базе данных не обновляются

Это мой код, который выполняется при выборе [Сохранить] нажимается кнопка:

ds.UpdateCommand = "UPDATE Users 
        SET Fullname='" + fname.Text + "', 
         Permission='" + per.SelectedValue + "', 
         Email='" + email.Text + "', 
         phone='" + phone.Text + "' 
        WHERE UserID=" + Session["userID"].ToString(); 
ds.Update(); 

Я читаю значения из формы, заполненной пользователем ds является SqlDataSource

Если я должен добавить более подробно, дайте мне знать


правок:

Эта страница для уточнения информации о пользователе

Я устанавливаю значения формы на Page_Load в зависимости от информации пользователя, уже существующей в базе данных.

пользователь редактирует его/ее информацию и нажмите [Сохранить]

после установки braekpoints, я обнаружил, что строка запроса принимает значения по умолчанию не новые. что мне делать?


Весь код:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Session["userID"] = Request.QueryString["id"]; 

     SqlConnection cn = new SqlConnection(); 
     cn.ConnectionString = ds.ConnectionString; 
     cn.Open(); 

     SqlCommand cm = new SqlCommand(); 
     cm.Connection = cn; 
     cm.CommandText = "select * from Users where UserID='" + Session["userID"].ToString() + "'"; 

     SqlDataReader dr; 
     dr = cm.ExecuteReader(); 

     if (dr.Read()) 
     { 
      uname.Text = dr["username"].ToString(); 
      fname.Text = dr["Fullname"].ToString(); 
      per.SelectedValue = dr["Permission"].ToString(); 
      email.Text = dr["Email"].ToString(); 
      phone.Text = dr["phone"].ToString(); 
     } 
     else Response.Redirect("Default.aspx"); 
     dr.Close(); 
     cn.Close(); 

} 
protected void Button3_Click(object sender, EventArgs e) 
{ 

    ds.UpdateCommand = "update Users set Fullname='" + fname.Text + "', Permission='" + per.SelectedValue + "', Email='" + email.Text + "', phone='" + phone.Text + "' where UserID=" + Session["userID"].ToString(); 
    ds.Update(); 
    Response.Redirect("control_pan.aspx"); 

} 

ответ

0

Я подозреваю, что Session["UserID"] является недействительным. Чтобы проверить эту точку останова на ds.Update();, поместите курсор на нее, а затем нажмите F9.
Чтобы увидеть результат, наведите указатель мыши на ds.UpdateCommand, когда точка останова приостанавливает работу.

Update: поместить код загрузки страницы будет выполняться только один раз, то есть когда первая страница загружается

if(!IsPostBack) 
{ 
    //put your code here 
} 

Update

protected void Page_Load(object sender, EventArgs e) 
{ 
if(!IsPostBack) 
{ 
    Session["userID"] = Request.QueryString["id"]; 

    SqlConnection cn = new SqlConnection(); 
    cn.ConnectionString = ds.ConnectionString; 
    cn.Open(); 

    SqlCommand cm = new SqlCommand(); 
    cm.Connection = cn; 
    cm.CommandText = "select * from Users where UserID='" + Session["userID"].ToString() + "'"; 

    SqlDataReader dr; 
    dr = cm.ExecuteReader(); 

    if (dr.Read()) 
    { 
     uname.Text = dr["username"].ToString(); 
     fname.Text = dr["Fullname"].ToString(); 
     per.SelectedValue = dr["Permission"].ToString(); 
     email.Text = dr["Email"].ToString(); 
     phone.Text = dr["phone"].ToString(); 
    } 
    else Response.Redirect("Default.aspx"); 
    dr.Close(); 
    cn.Close(); 
} 
} 
+0

no its not null, я думал, что тоже, и я проверил его. Я редактировал вопрос, не могли бы вы взглянуть? – Meensat

+0

не работает .. запрос пуст сейчас – Meensat

+0

Я думаю, что лучше, если вы обнаружите свой код и разметку – Mubarek

0

Я серьезно сомневаюсь, что вы предоставили достаточно подробную информацию здесь, чтобы решить эту проблему.

Этот тип: UserID? Нужно ли включать значение в кавычки?

Вы устанавливаете правильное значение в своем предложении WHERE и используете ли это значение в базе данных? Вам нужно посмотреть полученную строку запроса, а затем запустить ее вручную, чтобы определить, что может быть неправильным.

Кроме того, не должно быть префикса символов @ для вашей строки, чтобы новые строки были частью вашей строки? Это действительно то, как выглядит ваш код?

Конечно, не зная больше о коде, трудно сказать, что еще может быть.

+0

Я сожалею, что не достаточно ясный. UserID имеет тип int, не нужно вставлять, и я пытался добавить кавычки. Как я могу просмотреть полученную строку запроса и запустить ее вручную? Какие еще детали следует добавить? – Meensat

+0

Используйте отладчик. Каково значение 'UpdateCommand' после его установки? –

2

В принципе, если у вас есть DataSet и вы хотите использовать, чтобы обновить базу данных, вам необходимо:

  • определяют UpdateCommand, как показано на MSDN documentation ссылаться на столбцы из DataTable, который будет использоваться для обновления

  • обновления существующей строки в одном из ваших DataTable с внутри DataSet

  • , как только вы это сделали, вы можете позвонить .Update() в набор данных (или таблицу данных) для выполнения обновления - ADO.NET будет проверять наличие обновлений для любых из строк DataTable, и если обновление будет найдено, то UpdateCommand будет выполнено, с параметрами, связанных со значениями подряда DataTable «ы в вопросе

Я также рекомендую ознакомиться с тем, как детальная модель данных ADO.NET и использование DataSets и DataTables - например здесь Update Data Using .NET DataSets

Альтернатива, конечно, было бы создать SqlConnection и SqlCommand, используя параметризованную запрос сделать вставки самостоятельно, без всяких хлопот и усилий с DataSets и DataTables. Но в этом случае, убедитесь, что ВСЕГДА использование параметризованных запросов (и НИКОГДА просто сцепить вместе ваш SQL заявление, в том числе значений прямо из пользовательского ввода .....) - see why here

+0

Я обновляю базу данных с помощью 'SqlDataSource'. Я не знал, что мне нужно больше шагов для добавления. он работает с 'insert' и' delete' – Meensat

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