技巧随记:数据集更新函数

        数据集合DataSet某些内容如果发生改变,怎么反映到数据库哪,并且同时更新已经发生改变的部分?我们都知道把数据集合DataSet里面的内容绑定DataGrid控件,如果进行数据的插入,删除,更新等操作,是不是每次改变都需要把改变的结果反馈给数据库哪?显然不是很好的办法,效率不高哦。怎么办?

        可以实现数据库的一次读取到数据集合中,到处使用数据集合,即一次读取,到处使用 :)))

数据集合需要声名为:private static DataSet dt;
//数据操作类
 Access oledb = new Access();
在页面第一次加载的时候:
if( !this.IsPostBack )
   {
    dt = oledb.BindData( "Select * From digest Order By did Desc","digest" );
    BindTheGrid();
   }
其中函数:BindTheGrid()作用为绑定数据列表控件,具体代码:
//绑定表格
  private void BindTheGrid()
  {
   rssDataGrid.DataSource = dt.Tables[ 0 ].DefaultView;
   rssDataGrid.DataBind();
  }

这样在添加,或者更新,或者删除数据只是在当前数据集合中进行操作,放置一个按钮,其.Text属性为“保存所有改动”,这样提交数据集合,一次完成对数据库的更新:

private void saveAllSetingBtn_Click(object sender, System.EventArgs e)
        
{        
            
try
            
{
                oledb.UpdateDataSet( dt, 
"digest""Select * From digest" );
                Response.Write( 
"<script>alert('更新成功!请返回!')</script>" );
            }

            
catch
            
{
                Response.Write( 
"<script>alert('更新失败!请检查您的输入!')</script>" );
            }

        }
其数据操作类的相应数据集合更新函数是这样写的:
/// <summary>
        
/// 更新绑定的数据库里的表格
        
/// </summary>
        
/// <param name="ds">要更新的DataSet参数</param>
        
/// <param name="tableName">DataSet里面响应的表格名,对应着数据库里面的表</param>
        
/// <returns></returns>
        public DataSet UpdateDataSet( DataSet ds, string tableName, string handleString ) 
        {
            OleDbCommand oc 
= ReturnOleDbCommand( handleString );
            OleDbDataAdapter adapter 
= new OleDbDataAdapter();
            adapter.SelectCommand 
= oc;
            OleDbCommandBuilder builder 
= new OleDbCommandBuilder( adapter );
            adapter.Update( ds, tableName );
            oc.Connection.Close();
            ds.AcceptChanges();
            
return ds;            
        }        
        这样就完成了对数据集合的更新,前后,数据库只是访问了两次而已。
        如果使用Application 保存数据集合也是不错想法,好像不适合访问量小的站点



posted on 2005-10-06 16:15  yongboy  阅读(973)  评论(3编辑  收藏  举报

导航