简单认识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); } }
此随笔或为自己所写、或为转载于网络。仅用于个人收集及备忘。