简单认识DataSet与DataTable

DataSet 是放在内存中的,对DataSet中数据的修改并不直接反应到数据库,要通过 DataAdapter 的 Update 方法更新回数据库;

DataSet相当你用的数据库; DataTable相当于你的表。一个 DataSet 可以包含多个 DataTable;

DataSet 由表、关系和约束的集合组成。在 ADO.NET 中,DataTable对象用于表示 DataSet 中的表。DataTable 表示一个内存内关系数据的表;

例如:

SqlDataAdapter   da=new   SqlDataAdapter(cmd);   
  DataTable   dt=new   DataTable();   
  da.Fill(dt);   

例如:

连接数据库时

 

        public static DataSet Query(string SQLString)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                DataSet ds = new DataSet();
                try
                {
                    connection.Open();
                    SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
                    command.Fill(ds, "ds");
                }
                catch (System.Data.SqlClient.SqlException ex)
                {
                    throw new Exception(ex.Message);
                }
                return ds;
            }
        }

操作数据时

        protected void Page_Load(object sender, EventArgs e)
        { 
            if (!IsPostBack)
            {
                GetTopNews();
            }
        }

        protected string GetTopNews()
        {
            StringBuilder sb=new StringBuilder();
            string sql = "SELECT TOP 50 * from tb_content WHERE classid='90'";
            DataTable dt = Helper.HelperExecuteSql.Query(sql).Tables[0];
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    sb.Append("<li>" + dt.Rows[i]["Title"] + "</li>");
                } 
            }
            return sb.ToString();
        }  

 

http://www.lmwlove.com/ac/ID535 如何获得DataRow在DataTable中的行号

方法一
private int FindRowIndex(DataRow dr) 
{ 
    return dr.Table.Rows.IndexOf(dr); 
}
方法二:
private int FindRowIndex(DataRow dr) 
{
    for(int i=0;i<DataTable.Rows.Count;i++)
    {
        if(DataTable.Rows[i]["主键列"].ToString()=="我们要查找的值")
        {
           return i;
        }
    }
    return 0;
}                    

 

//https://www.cnblogs.com/OnlyDreams/archive/2012/03/20/2408246.html
对DataTable数据进行查询过滤
          //对DataTable数据进行查询过滤并返回DataTable

        //1、DataTable.Select(where);
        //2、DataView.RowFilter
        //3、Linq

        #region 创建一个表dt,并给其添加6行数据
        DataTable dt = new DataTable();
        dt.Columns.Add("ID", typeof(System.Int32));
        dt.Columns.Add("Name", typeof(System.String));
        dt.Columns.Add("Address", typeof(System.String));
        DataRow row1 = dt.NewRow();
        row1[0] = 1;
        row1[1] = "AdminAdmin";
        row1[2] = "Test";
        dt.Rows.Add(row1);
        DataRow row2 = dt.NewRow();
        row2[0] = 2;
        row2[1] = "AdmioknA";
        row2[2] = "Test";
        dt.Rows.Add(row2);
        DataRow row3 = dt.NewRow();
        row3[0] = 3;
        row3[1] = "AdminjunjieAdmin";
        row3[2] = "Test";
        dt.Rows.Add(row3);
        DataRow row4 = dt.NewRow();
        row4[0] = 4;
        row4[1] = "Admokin";
        row4[2] = "Test";
        dt.Rows.Add(row4);
        DataRow row5 = dt.NewRow();
        row5[0] = 5;
        row5[1] = "AdminAokdmijunjien";
        row5[2] = "Test";
        dt.Rows.Add(row5);
        DataRow row6 = dt.NewRow();
        row6[0] = 6;
        row6[1] = "Admin";
        row6[2] = "Test";
        dt.Rows.Add(row6);
#endregion

        //1、使用DataTable.Select(where);
        var newtable1 = dt.Clone();//把源表的结构给新表
        foreach (DataRow row in dt.Select("Name like '%ok%'"))
        {
            newtable1.ImportRow(row);
        }

        //2、使用DataView.RowFilter
        DataView dv = dt.DefaultView; ;
        dv.RowFilter = "Name like '%ok%'";
        var newdatatable2 = dv.ToTable();

        //3、使用linq
        var newtable3 = (from datarow in dt.AsEnumerable() where datarow.Field<string>("Name").IndexOf("ok") > -1 select datarow).CopyToDataTable();

        //如果数据量小,DataTable.Select()与DataView.RowFilter没有什么大的区别。如果数据量大,用DataView.RowFilter则比较快。linq不太了解


                            if (!string.IsNullOrEmpty(txtClientCodes.Text))
                            {
                                //https://www.cnblogs.com/OnlyDreams/archive/2012/03/20/2408246.html
                                DataTable dtNew = (from datarow in ds.Tables[0].AsEnumerable() where datarow.Field<string>("ClientCodes").IndexOf($"{txtClientCodes.Text}") > -1 select datarow).CopyToDataTable();

                              
                                ds.Tables[0].Rows.Clear();

                                foreach (DataRow row in dtNew.Rows)
                                {
                                    ds.Tables[0].ImportRow(row);
                                }
                            }

  

 

posted @ 2015-12-02 13:54  BloggerSb  阅读(271)  评论(0编辑  收藏  举报