首页 > 代码库 > datagridview的数据存取

datagridview的数据存取

这里主要是复习DataSet等数据或ADO.NET方面的知识。下面是一个简单的数据存储(在DataGridView上增加一行然后并存储到数据库的过程):

private void button1_Click(object sender, EventArgs e)
        {
            //插入一行内容
            SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=数据库名;User ID=sa;pwd=***");
            con.Open();
            SqlDataAdapter thisAdapter = new SqlDataAdapter("select itemId,productId,listPrice,unitCost,supplier,status,name,image from Item", con);
            SqlCommandBuilder scb = new SqlCommandBuilder(thisAdapter);
            DataSet ds = new DataSet();
            thisAdapter.Fill(ds, "Item");

            try
            {
                if (txtItemId.Text != "" && txtPicture.Text != "" && txtProductCount.Text != "" && txtProductId.Text != "" && txtProductName.Text != "" && txtProductPrice.Text != "" && txtYouhuiPrice.Text != "")
                {
                    //TODO:判断txtitemid里的内容已经存在数据库(写个bool方法,然后再次判断调用即可)
                    DataRow newRow = ds.Tables["Item"].NewRow();
                    newRow["itemId"] = this.txtItemId.Text;
                    newRow["productId"] = this.txtProductId.Text;
                    newRow["listPrice"] = this.txtProductPrice.Text;
                    newRow["unitCost"] = this.txtYouhuiPrice.Text;
                    newRow["supplier"] = this.txtProductCount.Text;
                    newRow["status"] = this.comboSellMode.Text;
                    newRow["name"] = this.txtProductName.Text;
                    newRow["image"] = this.txtPicture.Text;
                    ds.Tables["Item"].Rows.Add(newRow);
                    thisAdapter.Update(ds, "Item");
                }

                //更新datagridview表格
                //此处因为是绑定数据,不能用此句代码直接插入一行数据
                //dataGridView1.Rows.Add(new object[] { txtItemId.Text, txtProductId.Text, txtProductPrice.Text, txtYouhuiPrice.Text, txtProductCount.Text, comboSellMode.Text, txtProductName.Text, txtPicture.Text });//{}是对应列的值
                else
                {
                    MessageBox.Show("请将信息填写完整,并符合规则!", "Message to you:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                con.Close();
                            }
            catch (Exception ex)
            {
                MessageBox.Show("请检查信息输入格式!" + ex.Message, "Message to you,", MessageBoxButtons.OK, MessageBoxIcon.Error);

                //这里有个bug,没有实现表的同步更新
            }

        }

    一般关于使用DataSet的用法基本上都是一个模式,或者说数据连接这一块都是一个模式。

    1. 首先就是SqlConnection 来new出来一个连接数据库的字符串;

    2. 接着用DataAdapter对数据进行许多不同种类的操作,包括查询、更新和删除。它比DataReader对象更加通用一些;

    3.然后并没有编写SQL语句来进行更新,而是创建了更简单实用的CommandBuilder对象,它可以为我们创建正确的SQL语句,然后并将其自动与DataAdaper相关联;

    4.接下来就到了ado.net中重要的DataSet对象了,所有的复杂操作都会使用到它。它包含一组相关的DataTable对象,代表要使用的数据库表。每一个DataTable对象都有子DataRow和DataColumn对象,分别代表数据库表的行列。通过这些对象就可以获得表的所有元素;

     5.然后就是DataAdapter的填充方法 :thisAdapter.Fill(ds, "Item");

      6.最后要注意的是:数据库连接打开后,最后一定要关闭;对数据表操作后,一定要执行UpDate()方法,才能将修改保存到数据库;它隶属于DataAdapter。

       上面六步基本就是各种套路的东西了,如果有对数据的操作,就可以把这些操作的语句放在填充之后,也就是Fill()方法之后,因为这些的更改只是停留在内存,需要最后执行DataAdapter的UpDate()方法才能最终得以更新到数据库中。

        当这样的操作比较多的时候,就会发现很多方法的代码都是重复的,也就是上面那些套路。这个时候,我们就要用到面向对象了,也就是把这些相同的东西提取出来写成一个方法让大家共享,这就是一个面向对象或是不断重载等进行代码简化的过程,这就是真正严谨的开发的开始了吧。

datagridview的数据存取