2013-05-09 2 views
2

Может ли кто-нибудь объяснить, почему SqlDataAdapter используется в следующем коде? Код работает отлично без этого адаптера.Что такое использование адаптера данных

Кроме того, почему мы используем DataAdapter? Пожалуйста, помогите мне понять это использование DataAdapter.

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

     private void button1_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       SqlConnection con = new SqlConnection("Data Source=.....\\SQLEXPRESS;Initial Catalog=......;Integrated Security=True"); 
       con.Open(); 

       SqlDataAdapter da =new SqlDataAdapter(); // Why use `SqlDataAdapter` here? 
       SqlCommand sc = new SqlCommand("insert into bhargavc values(" + textBox1.Text + "," + textBox2.Text + ");", con); 
       var o = sc.ExecuteNonQuery(); 
       MessageBox.Show(o + "record to be inserted"); 
       con.Close(); 
      } 
      catch (Exception) 
      { 
       MessageBox.Show("error in the code"); 
      } 
     }  

     private void button2_Click(object sender, EventArgs e) 
     { 
      Application.Exit(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
     } 
    } 
} 
+0

Вы используете 'DataSet' где-нибудь в вашем коде? Вы должны использовать класс [DataAdapter Class] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.aspx), чтобы заполнить этот 'DataSet' методом' .Fill() ' , – Brian

+3

Священная инъекция для инъекций sql, Бэтмен! Этот код практически попросит взломать. –

ответ

4

Есть несколько причин для использования DataAdapter:

  1. Вы не можете заполнить DataSet без один.
  2. Когда адаптер завершит свой метод .Fill(), он закроет соединение для вас; вам не нужно явно вызывать метод .Close() для вашего объекта соединения. Хотя, по-прежнему хорошая практика.

В вашем случае нет необходимости иметь его. Но, если ты хочешь, чтобы использовать один, реализация будет выглядеть следующим образом:

SqlDataAdapter da = new SqlDataAdapter();  
DataSet ds = new DataSet(); 
da.Fill(ds); 

От там, дальнейшие действия, которые вы можете взять на ds объект как экспорт в Excel через Interop, заполняя DataGridView или даже обновляя таблицу базы данных.

5

Адаптер данных используется для считывания данных из устройства считывания данных в DataTable или DataSet.

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


В качестве примечания стороны следует использовать параметры вместо того, чтобы вводить значения непосредственно в запрос. Ваш код полностью открыт для атак SQL-инъекций.

+0

очень полезная заметка о SQL-инъекции – Mehran

6

Адаптер данных работает как посредник между базой данных и набором данных. Однако данные адаптера данных не могут хранить данные. Он просто передает данные из базы данных в набор данных.

Для примера:

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

Это должно дать более четкое представление об адаптерах данных.

+0

user2359385: спасибо я понял –

+0

@DuddupudiBhargav добро пожаловать. – Ajay

0
  1. Чтобы заполнить либо dataset или datatable
  2. Вы не должны закрывать соединение с SQL явно как .Close()
Смежные вопросы