2014-01-21 4 views
1

Я работаю над одним проектом для университета, и я хочу сказать, что я довольно новичок в asp.net.Запрос на обновление ASP.NET C# не работает

Ниже приведен код, с которым у меня возникают проблемы. Проблема в том, что функция обновления не работает. В загрузке страницы у меня есть несколько запросов выбора, и я загружаю данные из базы данных в некоторые текстовые поля и текстовые поля. Это работает нормально - он загружает данные образца, которые я добавил вручную в моей базе данных.

У меня есть кнопки, которые должны обновлять базу данных при нажатии.

Это код кнопки:

<a id="A1" class="button" onserverclick="box1_Click" runat="server"> 
     <span>Запази полето <img src="notification-tick.gif" width="12" height="12" /></span> 
     </a> 

Это код позади:

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 


public partial class admin_Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     //Loading the data from the database 

     string DatabaseConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["proekt"].ConnectionString; 
     string sql1_title = "SELECT title FROM home WHERE id=1"; 
     string sql1_image = "SELECT image FROM home WHERE id=1"; 
     string sql1_text = "SELECT text FROM home WHERE id=1"; 

     string sql2_title = "SELECT title FROM home WHERE id=2"; 
     string sql2_image = "SELECT image FROM home WHERE id=2"; 
     string sql2_text = "SELECT text FROM home WHERE id=2"; 

     string sql3_title = "SELECT title FROM home WHERE id=3"; 
     string sql3_image = "SELECT image FROM home WHERE id=3"; 
     string sql3_text = "SELECT text FROM home WHERE id=3"; 
     using (SqlConnection conn = new SqlConnection(DatabaseConnectionString)) 
     { 
      //box1 data load 
      SqlCommand cmd1_title = new SqlCommand(sql1_title, conn); 
      conn.Open(); 
      box1_title.Text = (string)cmd1_title.ExecuteScalar(); 
      conn.Close(); 
      SqlCommand cmd1_image = new SqlCommand(sql1_image, conn); 
      conn.Open(); 
      box1_img.Text = (string)cmd1_image.ExecuteScalar(); 
      conn.Close(); 
      SqlCommand cmd1_text = new SqlCommand(sql1_text, conn); 
      conn.Open(); 
      box1_text.InnerText = (string)cmd1_text.ExecuteScalar(); 
      conn.Close(); 

      //box2 data load 
      SqlCommand cmd2_title = new SqlCommand(sql2_title, conn); 
      conn.Open(); 
      box2_title.Text = (string)cmd2_title.ExecuteScalar(); 
      conn.Close(); 
      SqlCommand cmd2_image = new SqlCommand(sql2_image, conn); 
      conn.Open(); 
      box2_img.Text = (string)cmd2_image.ExecuteScalar(); 
      conn.Close(); 
      SqlCommand cmd2_text = new SqlCommand(sql2_text, conn); 
      conn.Open(); 
      box2_text.InnerText = (string)cmd2_text.ExecuteScalar(); 
      conn.Close(); 

      //box3 data load 
      SqlCommand cmd3_title = new SqlCommand(sql3_title, conn); 
      conn.Open(); 
      box3_title.Text = (string)cmd3_title.ExecuteScalar(); 
      conn.Close(); 
      SqlCommand cmd3_image = new SqlCommand(sql3_image, conn); 
      conn.Open(); 
      box3_img.Text = (string)cmd3_image.ExecuteScalar(); 
      conn.Close(); 
      SqlCommand cmd3_text = new SqlCommand(sql3_text, conn); 
      conn.Open(); 
      box3_text.InnerText = (string)cmd3_text.ExecuteScalar(); 
      conn.Close(); 
     } 
    } 

    protected void box1_Click(object sender, EventArgs e) 
    { 
     string DatabaseConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["proekt"].ConnectionString; 
     string sql1 = "UPDATE home SET [email protected], [email protected], [email protected] WHERE Id=1"; 
     using (SqlConnection conn = new SqlConnection(DatabaseConnectionString)) 
     { 
      SqlCommand cmd2 = new SqlCommand(sql1, conn); 

      cmd2.Parameters.AddWithValue("@title", box1_title.Text); 
      cmd2.Parameters.AddWithValue("@image", box1_img.Text); 
      cmd2.Parameters.AddWithValue("@text", box1_text.InnerText); 

      conn.Open(); 
      cmd2.ExecuteNonQuery(); 
      conn.Close(); 
     } 
    } 

    protected void box2_Click(object sender, EventArgs e) 
    { 

    } 


    protected void box3_Click(object sender, EventArgs e) 
    { 

    } 
} 

Когда я внести изменения в название box1, а затем нажмите кнопку, чтобы обновить база данных фактически обновляет страницу и снова загружает образцы данных, и мои изменения не сохраняются.

Не могли бы вы помочь мне с этим ?. Ошибок нет.

Спасибо, ребята, очень.

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

+3

Избегайте ** 9 ** поездок на дБ; 'SELECT id, title, image, text FROM home WHERE id in (1,2,3) order by id' и фильтр на клиенте –

+0

По предложению откройте соединение один раз и выполните все ваши запросы сразу, прежде чем закрыть его , – StuartLC

ответ

4

Это потому, что вам нужно позаботиться о ASP.NET lifecycle.

Вам нужно проверить, есть ли его PostBack (Отправка происходит при нажатии кнопки) или нет ... Или вы всегда будете переопределять свои данные.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!PostBack) 
    { 
      string DatabaseConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["proekt"].ConnectionString; 
      string sql = "SELECT id,title,image,text FROM home WHERE id in (1,2,3) order by id";  
      using (SqlConnection conn = new SqlConnection(DatabaseConnectionString)) 
      { 
      conn.Open(); 

поиск DataReader -> и использовать его здесь ... Сохраните возвращающимся данные в в DataReader и фильтр ID и если его пункт/название и т.д., как here и here

  conn.Close(); 
      } 

    }  
} 
+0

Ты избил меня до этого :) –

+0

Это сработало спасибо! Где лучше всего открыть соединение, а затем закрыть его, потому что я открываю и закрываю много раз? – Berchev

+0

@Berchev Просто запустите DataBase один раз в начале, а в конце просто закройте его, после того как вы выполнили все транзакции (я дам вам пример в своем ответе).Если мой ответ верен, отметьте его как ответ, пожалуйста;) – DatRid

0

Fisrt , Я хочу предположить, что в Page_Load вы только открываете соединение sql один раз и выполняете все команды, пока соединение открыто, а затем закрывайте его в конце. Это ускорит загрузку страницы.

Во-вторых, вы можете использовать asp linkbutton для создания обратной передачи при нажатии. Синтаксис должен выглядеть так:

<asp:LinkButton ID="A1" runat="server" OnClick="box1_Click"> 
    <span>Запази полето <img src="notification-tick.gif" width="12" height="12" /></span> 
</asp:LinkButton> 
+0

Спасибо за предположим, я попробую это. Для кнопки я использую «a», потому что шаблон css, который я использую, нуждается в этом для стиля. – Berchev

+0

Обязательно ли кодировать текст полей перед его записью в базе данных или параметризованные запросы в порядке? – Berchev

+0

Вы можете добавить класс css в LinkButton следующим образом: CssClass = "button". – robert00769

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