niceaashish Ответов: 1

Проверьте базу данных с многострочными значениями текстового поля


Здравствуйте Друзья,
я застрял с вопросом, где у меня есть две таблицы клиент и компания.
таблица компаний имеет идентификатор столбца и компанию
клиент имеет три столбца client_id , client_name и company_id

на странице у меня есть два текстовых поля: одно говорит о компании , а другое-о клиенте, текстовое поле, которое принимает значения для клиента, - это многострочное текстовое поле (что здесь необходимо).

все сделано, insert работает нормально, delete работает нормально, но при обновлении у меня есть вопрос, Как удалить те клиенты, которые хранятся в таблице client, но после обновления их там не должно быть.



public void isclientpresent(int selectecustomer, string clientname)
 {
     SqlConnection con = new SqlConnection(@"Data Source=AASHISH\SQLEXPRESS;Initial Catalog=customerdb;Integrated Security=True");
     con.Open();
     SqlCommand cmd = new SqlCommand("Select * from client where company_id='"+selectecustomer+"'and client_name='"+clientname+"'", con);
     SqlDataAdapter sqlda = new SqlDataAdapter(cmd);
     DataSet sqlds = new DataSet();
     sqlda.Fill(sqlds);
     con.Close();

     if (sqlds.Tables[0].Rows.Count > 0)
     {
         //
     }
     else
     {
         insertclient(selectecustomer, clientname);
     }

 }



protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
 {
     int selectedcustomer = Convert.ToInt16(GridView1.Rows[e.RowIndex].Cells[3].Text);

     string[] allLines = txtclients.Text.Split('\n');
     foreach (string text in allLines)
     {
         isclientpresent(selectedcustomer, text);
     }

 }

 public void insertclient(int selectedcompany, string selectedclient)
 {
     SqlConnection con = new SqlConnection(@"Data Source=AASHISH\SQLEXPRESS;Initial Catalog=customerdb;Integrated Security=True");
     con.Open();
     SqlCommand cmd = new SqlCommand("Insert into client (client_name,company_id) VALUES('" + selectedclient+ "',"+selectedcompany+")", con);
     cmd.ExecuteNonQuery();
     con.Close();

 }


Что я уже пробовал:

Когда я выбираю update GridView1_RowUpdating снимается и один за другим вносится в базу данных, чтобы проверить, существуют ли они там или нет . если нет, то они вызывают insert query.

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

Может ли кто-нибудь помочь мне в этом

Vincent Maverick Durano

добавляя к SQL-инъекции, я бы также предложил вам всегда использовать "using block" При работе с объектами, которые потребляют ресурсы, такими как: SqlConnection и SqlCommand

1 Ответов

Рейтинг:
2

Vincent Maverick Durano

Цитата:
удалите те клиенты, которые хранятся в таблице client, но после ее обновления их там не должно быть.


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

private void BindGrid(){          
      using (SqlConnection sqlConn = new SqlConnection
            (ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString)){
                string sql = "SELECT * FROM YourTableName";
                using(SqlCommand sqlCmd = new SqlCommand(sql,sqlConn)){
                    sqlConn.Open();
                    using(SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCmd)){
                        sqlAdapter.Fill(dt);
                    }
                }
            }

            if(dt.Rows.Count > 0){
                GridView1.DataSource = dt;
                GridView1.DataBind();
            } 
}


затем в событиях RowUpdating и RowDeleting вы просто вызываете метод BindGrid (), чтобы обновить вашу сетку с изменениями:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e){
   //Your existing code
   BindGrid();
}



Пожалуйста, обратите внимание на следующее:

(1) храните строку подключения в файле web.config, а не жестко кодируйте ее в своем коде.

(2) Всегда используйте запросы параметров при передаче параметров в ваш SQL-запрос. Вот еще одна ссылка, на которую вы, возможно, захотите взглянуть: Защитите свои данные: предотвратите SQL-инъекцию[^]

(3) Не забудьте использовать "Using Block" При работе с объектами, которые потребляют ресурсы, такими как: SqlConnection и SqlCommand