简单认识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);
}
}

此随笔或为自己所写、或为转载于网络。仅用于个人收集及备忘。

浙公网安备 33010602011771号