C#弱类型Dataset和强类型Dataset

来源:互联网 发布:国际数据分析师认证 编辑:程序博客网 时间:2024/04/27 14:50

原文地址:http://zzagain.blog.163.com/blog/static/16930562820122179922819/

弱类型Dataset

      1、自动生成 InsertCommand,DeleteCommand....

                             new SqlCommandBuilder(SqlDataAdapter);

      2、涉及到的类 

           SqlConnection    与数据库之间的连接。  相当于delphi dbconnection

           SqlCommand     负责向数据库中发送SQL命令           SqlDataReader    负责读取数据集,读取SqlCommand   的执行结果。  

           SqlDataReader    和  SqlCommand   相加相当于DELPHI  中的AdoQuery,AdoDataset,Adocommand,AdoTable等

           SqlDataReader    只可按照查询出来的数据表指针向下读取数据,不可回头,也不可以隔行向上或向下读取数据。

           SqlDataAdapter   与数据库交互执行查询语句

           Dataset     数据集(可以是多个),接收SqlDataAdapter  的查询结果  与DELPHI中的Adodataset类似。

           DataTable  接收Dataset     中的某一个数据集,

           DataRow   接收DataTable   的行

 3、操作数据库

          增加行

                DataRow row=table.NewRow();
                row["ID"] = 123;
                row["Name"] = "456";
                row["Department_ID"] = "01";
                table.Rows.Add(row);
                DataAdapter.Update(dataset);   //提交到数据库中

      删除行:

                table.Rows.Remove(table.Rows[1]);//只在内存中 删除行
                ad.Update(ds);//提交到数据库中 
                table.Rows[0].Delete();//真正在数据库中删除
                DataAdapter.Update(table);  //提交到数据库中

     修改行:

               DataRow row=table.Rows[0];
               row["name"]="r";
               DataAdapter.Update(ds);  //向数据库提交对数据的更改

提取其中的某一列的值

            MessageBox.Show(table.Rows[i]["name"].ToString());

            string connstring = ConfigurationManager.ConnectionStrings["conn1"].ConnectionString;
            SqlConnection conn = new SqlConnection(connstring);
            DataSet ds = new DataSet();
            SqlDataAdapter ad = new SqlDataAdapter("select * from employee ",conn);
            ad.Fill(ds);
            new SqlCommandBuilder(ad);
            DataTable table=ds.Tables[0];
              DataRow row=table.Rows[0];
              // row["name"]="r";
              //  ad.Update(ds);  //向数据库提交对数据的更改
              MessageBox.Show(table.Rows.Count.ToString());
                table.Rows.Remove(table.Rows[1]);//只在内存中 删除行
                ad.Update(ds);// 
                table.Rows[0].Delete();//真正在数据库中删除
                ad.Update(table);
                MessageBox.Show(table.Rows.Count.ToString());
              /**  DataRow rw=table.NewRow();
                rw["ID"] = 123;
                rw["Name"] = "456";
                rw["Department_ID"] = "01";
                table.Rows.Add(rw);
                ad.Update(ds);//增加行 **/

 4、通过SqlCommand  操作数据库

            string connstring = ConfigurationManager.ConnectionStrings["conn1"].ConnectionString;
            SqlConnection conn = new SqlConnection(connstring);
            conn.Open();
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select * from employee  where   id=@id";
            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SqlParameter("@id",textBox2.Text));
            SqlDataReader red=cmd.ExecuteReader();
            if (red.Read())
            {
                MessageBox.Show("主键重复,请检查!");
                return;
            }
            red.Close();  //在对应的Command执行新的命令之前,要把与该Command相关联的DataReader关掉
            cmd.CommandText = "insert into employee(id,name,department_id) values(@id,@name,@department_id)  ";
            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SqlParameter("ID",textBox2.Text));
            cmd.Parameters.Add(new SqlParameter("name",textBox3.Text));
            cmd.Parameters.Add(new SqlParameter("department_id", textBox3.Text));
            cmd.ExecuteNonQuery();
            MessageBox.Show("插入成功");

强类型Dataset

    1、批量操作数据库时,需要先把对应的TableAdapter 的 Connection 打开,执行完毕后再关闭掉,这样可以明显提高执行效率。

     2、需要新建数据集项目、新建数据连接。

    3、把数据连接中的表拖入数据信项目。

    4、系统自动生成对应的TableAdapter 对像,DataTable对像。ROW对像。

    5、可在Dataset对像中自定义方法。包括带参数的方法,通过这些方法来查询、修改、删除数据库中的数据。

    6、可通过DataTable[i].列名  来取值     i表示行ID,

    //7、在有大数据量执行之前要把对应的 TableAdapter 所对应的Connection 打开,

    执行完毕后再关掉,这样可以明显提高扫行效率。
   例  表名为  Employee  DataSet1为数据集名

            EMPLOYEETableAdapter adapt = new EMPLOYEETableAdapter();
            DataSet1.EMPLOYEEDataTable data = adapt.GetData();

            
            for (int i = 0; i < data.Count; i++)
            {
                DataSet1.EMPLOYEERow Row = data[i];
                if (!data[i].IsCITYNull())
                {
                    MessageBox.Show(data[i].CITY);
                }
               
                MessageBox.Show(data[i].NAME);
            }
            data[0].NAME = "china";
            adapt.Update(data);


0 0
原创粉丝点击