分享

DataSet和SqlDataAdapter访问数据库模型

 寒木萧条 2010-09-29
使用DataAdapter对象和DataSet对象实现断开连接的数据访问步骤
 

一、查询数据库的步骤
1.创建数据适配器对象
  SqlDataAdapter da = new SqlDataAdapter();
 
2.创建数据库连接对象和命令对象
  SqlConnection conn = new SqlConnection();
  conn.ConnectionString = "Data Source=PC-2010;Initial Catalog=BookShop;User ID=sa;Password=123456";
  SqlCommand selectCmd=new SqlCommand();
  selectCmd.CommandText = "select * from Books";
  selectCmd.Connection = conn;
 
3.设置数据适配器的命令属性
  da.SelectCommand = selectCmd;
 
4.创建数据集对象
  DataSet data = new DataSet();
 
5.调用数据适配器的Fill填充方法
  da.Fill(data,"Books");
 
6.将数据显示在网页上
  gvCheckAll.DataSource=data.Tables["Books"];
  gvCheckAll.DataBind();
 
 
二、向数据库中添加记录的步骤
1.创建数据适配器对象
  SqlDataAdapter da = new SqlDataAdapter();
 
2.创建数据库连接对象
  SqlConnection conn = new SqlConnection();
  conn.ConnectionString = "Data Source=PC-2010;Initial Catalog=BookShop;User ID=sa;Password=123456";
 
3.创建查询命令对象
  SqlCommand selectCmd = new SqlCommand();
  selectCmd.CommandText = "select * from Books";
  selectCmd.Connection = conn;
 
4.创建添加数据命令的对象
  SqlCommand insertCmd = new SqlCommand();
  insertCmd.CommandText = "insert into Books values(@BookName,@Author,@Publisher,@UnitPrice,@Discount,@BookImageFileName)";
  insertCmd.Parameters.Add("@BookName", SqlDbType.NVarChar, 50, "BookName");
  insertCmd.Parameters.Add("@Author", SqlDbType.NVarChar, 50, "Author");
  insertCmd.Parameters.Add("@Publisher", SqlDbType.NVarChar, 50, "Publisher");
  insertCmd.Parameters.Add("@UnitPrice", SqlDbType.NVarChar, 10, "UnitPrice");
  insertCmd.Parameters.Add("@Discount", SqlDbType.NVarChar, 8, "Discount");
  insertCmd.Parameters.Add("@BookImageFileName", SqlDbType.NVarChar, 50, "BookImageFileName");
  insertCmd.Connection = conn;
 
5.将命令对象关联到数据适配器
  da.SelectCommand = selectCmd;
  da.InsertCommand = insertCmd;
 
6.创建数据集对象
  DataSet data = new DataSet();
 
7.用SqlDataAdapter的Fill方法填充数据集
  da.Fill(data,"Books");
 
8.创建一个具有data.Tables["Books"]框架的行对象,并向其中添加数据
  DataRow drNew = data.Tables["Books"].NewRow();
  drNew["BookName"] = txtName.Text;
  drNew["Author"] = txtAuthor.Text;
  drNew[3] = txtPublisher.Text;
  drNew[4] = txtUnitPrice.Text;
  drNew[5] = txtDiscout.Text;
  drNew[6] = txtImage.Text;
 
9.向表中添加行
  data.Tables["Books"].Rows.Add(drNew);
 
10.将数据通过数据适配器更新到数据库中
   da.Update(data,"Books");
 
三、修改数据库中的数据
1.创建数据适配器对象
  SqlDataAdapter da = new SqlDataAdapter();
 
2.创建数据库连接对象
  SqlConnection conn = new SqlConnection();
  conn.ConnectionString = "Data Source=PC-2010;Initial Catalog=BookShop;User ID=sa;Password=123456";
 
3.创建查询命令对象
  SqlCommand selectCmd = new SqlCommand();
  selectCmd.CommandText = "select * from Books";
  selectCmd.Connection = conn;
 
4.创建修改数据的命令对象
  SqlCommand editCmd = new SqlCommand();
  editCmd.CommandText = "update Books set
Discount=@Discount where BookID=@BookID";
  editCmd.Parameters.Add("@BookID", SqlDbType.Int, 4, "BookID");
  editCmd.Parameters.Add("@Discount", SqlDbType.NVarChar, 8, "Discount");
  editCmd.Connection = conn;
 
5.将命令对象关联到数据适配器
  da.SelectCommand = selectCmd;
  da.UpdateCommand = editCmd;
 
6.创建数据集对象
  DataSet data = new DataSet();
 
7.用SqlDataAdapter的Fill方法填充数据集
  da.Fill(data, "Books");
 
8.查找要修改的数据所在的数据行
  方法1:
  int nBookID = int.Parse(txtBookId.Text);
  DataRow editDr = null;
  foreach(DataRow dr in data.Tables["Books"].Rows)
  {
      if (int.Parse(dr[0].ToString()) == nBookID)
      {
          editDr = dr;
          break;
      }
  }
 
  方法2:
  data.Tables["Books"].PrimaryKey = new DataColumn[] { data.Tables["Books"].Columns["BookID"] };
  DataRow editDr = data.Tables["Books"].Rows.Find(int.Parse(txtBookId.Text));
  if (editDr == null)
  {
      return;
  }
 
  方法3:
  DataRow[] drSelect = data.Tables["Books"].Select("BookID="+txtBookId.Text.Trim());
  DataRow editDr;
  if(drSelect.Length>0)
  {
     editDr = drSelect[0];
  }
  else
  {
     return;
  }
 
9.找到要修改的数据所在的行后修改其对应字段的值
  editDr["Discount"] = txtNewDiscout.Text;
 
10.将数据通过数据适配器更新到数据库中
   da.Update(data,"Books");
 
 
四、删除数据库中的数据
1.创建数据适配器对象
  SqlDataAdapter da = new SqlDataAdapter();
 
2.创建数据库连接对象
  SqlConnection conn = new SqlConnection();
  conn.ConnectionString = "Data Source=PC-2010;Initial Catalog=BookShop;User ID=sa;Password=123456";
 
3.创建查询命令对象
  SqlCommand selectCmd = new SqlCommand();
  selectCmd.CommandText = "select * from Books";
  selectCmd.Connection = conn;
 
4.创建删除数据的命令对象
  SqlCommand delCmd = new SqlCommand();
  delCmd.CommandText = "delete Books where
BookID=@BookID";
  delCmd.Parameters.Add("@BookID", SqlDbType.Int, 4, "BookID");
  delCmd.Connection = conn;
 
5.将命令对象关联到数据适配器
  da.SelectCommand = selectCmd;
  da.DeleteCommand = delCmd;
 
6.创建数据集对象
  DataSet data = new DataSet();
 
7.用SqlDataAdapter的Fill方法填充数据集
  da.Fill(data, "Books");
 
8.查找要删除的数据所在的数据行
  int nBookID = int.Parse(txtDelete.Text);
  DataRow delDr = null;
  foreach(DataRow dr in data.Tables["Books"].Rows)
  {
      if(int.Parse(dr[0].ToString())==nBookID)
      {
         delDr = dr;
         break;
      }
  }
 
9.找到要删除的数据所在的行后将其删除
  delDr.Delete();
 
10.将数据通过数据适配器更新到数据库中
   da.Update(data,"Books");
 
 

注:
(一)
DataAdapter有4个命令属性

(1)SelectCommand
(2)InsertCommand
(3)UpdateCommand
(4)DeleteCommand
 
(二)
数据适配器Fill方法用于使用DataAdapter的SelectCommand的结果来填充DataSet,
但如果我们通过代码在DataSet里已经定义好了表的架构,就可以不用再用SelectCommand从数据库中读取数据来填充数据集
 
(三)
用DataSet操作数据库有两大步骤

(1)更改DataSet中的数据
(2)将DataSet中的数据更新到数据库
 
(四)
find是数据行Rows的方法
select是数据表Tables["Books"]的方法
数据表的select方法用于查询满足条件的行,返回行数组
 
(五)
ADO.NET两种数据访问模型

1.使用Connection对象、Command对象、DataReader对象实现保持连接的数据访问
2.使用DataAdapter对象和DataSet对象实现断开连接的数据访问
 

(六)
SqlCommand.Parameters.Add(参数)里面参数的含义
insertCmd.Parameters.Add("@BookName", SqlDbType.NVarChar, 50, "BookName");
第四个参数"BookName"表示的是数据集里新添加数据的"BookName"字段对应的值
editCmd.Parameters.Add("@BookID", SqlDbType.Int, 4, "BookID");
第四个参数"BookID"表示在数据集里面对数据所做修改的那一行"BookID"字段所对应的值

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章