2

谁能解释为什么SqlDataAdapter在下面的代码中使用 an ?没有这个适配器,代码可以正常工作。

另外,我们为什么要使用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)
        {
        }
    }
}
4

4 回答 4

6

数据适配器就像数据库和数据集之间的中介。但是,数据适配器无法存储数据。它只是将数据库中的数据提供给数据集。

例如:

水管用于将水从水源(井、池塘等)带到目的地。但是,管道不用于储水。同样,数据适配器(如水管)将数据从数据库发送到数据集。

这应该可以更清楚地了解数据适配器。

于 2013-05-10T05:40:36.163 回答
5

数据适配器用于将数据从数据读取器读取到DataTableDataSet中。

由于您没有在此代码中从数据库中读取任何数据,因此数据适配器完全是多余的。


附带说明一下,您应该使用参数而不是将值直接放入查询中。您的代码对 SQL 注入攻击完全开放。

于 2013-05-09T17:05:55.470 回答
4

使用DataAdapter有几个原因:

  1. 没有一个就无法填充DataSet
  2. 当适配器完成其.Fill()方法时,它将为您关闭连接;您不必显式调用.Close()连接对象上的方法。虽然,这仍然是一个很好的做法。

在您的情况下,没有必要拥有一个。但是,如果您确实想使用一个,实现将如下所示:

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

从那里,您可以对ds对象采取进一步的操作,例如通过 Interop 导出到 Excel、填充DataGridView甚至更新数据库表。

于 2013-05-09T17:19:48.127 回答
0
  1. 填写dataset或填写datatable
  2. 您不必像这样明确地关闭 SQL 连接.Close()
于 2017-08-17T12:00:23.087 回答