OleDbConnectionStringBuilder oleConStr = new OleDbConnectionStringBuilder();Access 连接信息oleConStr.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + myDBFileName + ";User Id=admin;Password=;";Excel 连接信息string myExcelConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + myDBFileName + ";Extended Properties=Excel 8.0;"; myExcelConStr = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=" + myDBFileName + ";" + @"Extended Properties=" + Convert.ToChar(34).ToString() + @"Excel 8.0;" + ExcelConnectionOptions() + Convert.ToChar(34).ToString(); public bool Headers { get { return HasHeaders; } set { HasHeaders = value; } } public bool MixedData { get { return IsMixedData; } set { IsMixedData = value; } } private string ExcelConnectionOptions() { string strOpts = ""; if (this.MixedData == true) strOpts += "Imex=2;"; if (this.Headers == true) strOpts += "HDR=Yes;"; else strOpts += "HDR=No;"; return strOpts; }=======查询数据=========== OleDbConnection OleConn = new OleDbConnection(oleConStr.ConnectionString); OleDbCommand cmd; string SqlStr = " Select top 1 * from [" + newMaTolName + "] "; cmd = new OleDbCommand(SqlStr, OleConn); OleDbDataAdapter OleDapt = new OleDbDataAdapter(); OleDapt.SelectCommand = cmd; OleConn.Open(); DataSet myDS = new DataSet(); OleDapt.Fill(myDS);注意:如果是Excel数据库需在表名后加"$";=======增加字段===========SqlStr = " ALTER TABLE [" + newMaTolName.Replace("$","") + "] ADD IsRead decimal,RowNo long IDENTITY(1,1) ";cmd = new OleDbCommand(SqlStr, OleConn);int affectRows = cmd.ExecuteNonQuery();=======在DataSet表中增加一列=======myDS 是已保存有数据的DataSetif (myDS.Tables[0].Rows.Count < 1) { return IsSuccess; } DataTable dt = myDS.Tables[0]; DataColumn dc = new DataColumn(); dc.DataType = Type.GetType("System.String"); dc.DefaultValue = 1; dc.ColumnName = "MaTolName"; dt.Columns.Add(dc); //给该列赋值 for (int i = 0; i < dt.Rows.Count; i++) { dt.Rows[i]["MaTolName"] = myMaTolName; } dt.DataSet.AcceptChanges();=======获取数据源的框架信息,如其中的表名等.==============System.Data.DataTable dt= OleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);=======获取与更新 DataGrid中的数据改变,并更新数据源.==========================DataTable dtChanges = dt.GetChanges();OleDbCommand oleCmd;OleDbDataAdapter oleda = new OleDbDataAdapter(oleCmd); oleda.InsertCommand = new OleDbCommand(strInsert,oleConn);oleda.UpdateCommand = new OleDbCommand(strUpdate,oleConn); oleAdapter.Update(dtChanges); private void CreateNewTable() { System.Data.DataTable table = new DataTable("Student"); DataColumn column; DataRow row; column = new DataColumn(); column.DataType = System.Type.GetType("System.Int32"); column.ColumnName = "SID"; column.AutoIncrement = true; column.ReadOnly = false; column.Unique = true; table.Columns.Add(column); column = new DataColumn(); column.DataType = System.Type.GetType("System.String"); column.ColumnName = "Name"; column.AutoIncrement = false; column.Caption = "Name"; column.ReadOnly = false; column.DefaultValue = "myName"; column.Unique = false; table.Columns.Add(column); //设置表的主键 DataColumn[] PrimaryKeyColumns = new DataColumn[1]; PrimaryKeyColumns[0] = table.Columns["SID"]; table.PrimaryKey = PrimaryKeyColumns; table.AcceptChanges(); DataSet dataSet = new DataSet(); dataSet.Tables.Add(table); for (int i = 0; i <= 2; i++) { row = table.NewRow(); //row["SID"] = i; //row["Name"] = "name " + i; table.Rows.Add(row); } dataSet.AcceptChanges(); this.dataGrid1.DataSource = dataSet.Tables[0]; } =======表的复制=========//创建新表dataTableDestDataTable dataTableDest = new DataTable(); //将表dataTableSource的结构复制到新表dataTableDest中dataTableDest = dataTableSource.Clone(); //然后再复制数据到新表中foreach(DataRow dr in dataTableSource.Rows) { //使用ImportRow()方法复制数据。若用dataTableDest.Rows.Add(dr)将会出错:System.ArgumentException: 该行已经属于另一个表。 dataTableDest.ImportRow(dr); } 直接用下面的方法就行了dataTableDest = dataTableSource.Copy();========创建表================= DataTable dt = new DataTable("TableName");//增加列 dt.Columns.Add("column0", System.Type.GetType("System.String")); dt.Columns.Add(new DataColumn("IsChild", typeof(bool))); DataColumn dc = new DataColumn("column1", System.Type.GetType("System.Boolean")); dt.Columns.Add(dc);//增加行 DataRow dr = dt.NewRow(); dr["column0"] = "Good"; dr["column1"] = true; dt.Rows.Add(dr); //Doesn't initialize the row DataRow dr1 = dt.NewRow(); dt.Rows.Add(dr1);//选择行 //Search the second row 如果没有赋值,则用is null来select DataRow[] drs = dt.Select("column1 is null"); DataRow[] drss = dt.Select("column0 = 'Good'");//复制表包括数据 DataTable dtNew = dt.Copy();//只复制表的架构 DataTable dtOnlyScheme = dt.Clone();//增加行并赋值 //Method 1 DataRow droperate = dt.Rows[0]; droperate["column0"] = "AXzhz"; droperate["column1"] = false; //Method 2 droperate[0] = "AXzhz"; droperate[1] = false; //Method 3 dt.Rows[0]["column0"] = "AXzhz"; dt.Rows[0]["column1"] = false; //Method 4 dt.Rows[0][0] = "AXzhz"; dt.Rows[0][1] = false; dtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray);//获取行的状态 if (dt.Rows[0].RowState == DataRowState.Unchanged) { }//将表转换成xml数据流形式 System.IO.TextWriter tw = new System.IO.StringWriter(); //if TableName is empty, WriteXml() will throw Exception. dtNeedCoveret.TableName=dtNeedCoveret.TableName.Length==0?"Table_AX":dtNeedCoveret.TableName; dtNeedCoveret.WriteXml(tw); dtNeedCoveret.WriteXmlSchema(tw); System.IO.TextReader trDataTable = new System.IO.StringReader(xml.Substring(0, xml.IndexOf("<?xml"))); System.IO.TextReader trSchema = new System.IO.StringReader(xml.Substring(xml.IndexOf("<?xml"))); DataTable dtReturn = new DataTable(); dtReturn.ReadXmlSchema(trSchema); dtReturn.ReadXml(trDataTable);//对表中的数据进行筛选 //It's so strange that the second row has been filtered //the second row show in GridView never //It means null field will be filter always. //Filter the all conditions dt.DefaultView.RowFilter = "column1 <> true"; //dt.DefaultView.RowFilter = "column1 = true"; dt.DefaultView.RowStateFilter = DataViewRowState.Added;//对表的数据排序 //Stupid method DataRow[] drsss = dt.Select(String.Empty, "column0 DESC , column1 ASC"); //Clever method dt.DefaultView.Sort = "column0 , column1 ASC"; dt.DefaultView.Sort = "ID ,Name ASC"; dt=dt.DefaultView.ToTable();//表的合并 //两个结构相同的DT合并 /**//// <summary> /// 将两个列不同的DataTable合并成一个新的DataTable /// </summary> /// <param name="dt1">表1</param> /// <param name="dt2">表2</param> /// <returns>合并过的新表</returns> private DataTable UnionSameDataTable(DataTable dt1, DataTable dt2) { DataTable dt3 = dt1.Clone(); object[] obj = new object[dt3.Columns.Count]; for (int i = 0; i < dt1.Rows.Count; i++) { dt1.Rows[i].ItemArray.CopyTo(obj, 0); dt3.Rows.Add(obj); } for (int i = 0; i < dt2.Rows.Count; i++) { dt2.Rows[i].ItemArray.CopyTo(obj, 0); dt3.Rows.Add(obj); } return dt3; } //两个结构不同的DT合并 /**//// <summary> /// 将两个列不同的DataTable合并成一个新的DataTable /// </summary> /// <param name="dt1">表1</param> /// <param name="dt2">表2</param> /// <returns>合并过的新表</returns> private DataTable UniteDataTable(DataTable dt1, DataTable dt2) { DataTable dt3 = dt1.Clone(); for (int i = 0; i < dt2.Columns.Count; i++) { dt3.Columns.Add(dt2.Columns[i].ColumnName); } object[] obj = new object[dt3.Columns.Count]; for (int i = 0; i < dt1.Rows.Count; i++) { dt1.Rows[i].ItemArray.CopyTo(obj, 0); dt3.Rows.Add(obj); } if (dt1.Rows.Count >= dt2.Rows.Count) { for (int i = 0; i < dt2.Rows.Count; i++) { for (int j = 0; j < dt2.Columns.Count; j++) { dt3.Rows[i][j + dt1.Columns.Count] = dt2.Rows[i][j].ToString(); } } } else { DataRow dr3; for (int i = 0; i < dt2.Rows.Count - dt1.Rows.Count; i++) { dr3 = dt3.NewRow(); dt3.Rows.Add(dr3); } for (int i = 0; i < dt2.Rows.Count; i++) { for (int j = 0; j < dt2.Columns.Count; j++) { dt3.Rows[i][j + dt1.Columns.Count] = dt2.Rows[i][j].ToString(); } } } return dt3; } //多个 结构相同的DataTable合并 public DataTable GetAllEntrysDataTable() { DataTable newDataTable = GetEntrysDataTable(0).Clone(); object[] obj = new object[newDataTable.Columns.Count]; for (int i = 0; i < entryGroups.GetEntryGroupCount(); i++) { for (int j = 0; j < GetEntrysDataTable(i).Rows.Count; j++) { GetEntrysDataTable(i).Rows[j].ItemArray.CopyTo(obj, 0); newDataTable.Rows.Add(obj); } } return newDataTable; }//执行DataTable中的查询返回新的DataTable //方法一 /**//// <summary> /// 执行DataTable中的查询返回新的DataTable /// </summary> /// <param name="dt">源数据DataTable</param> /// <param name="condition">查询条件</param> /// <returns></returns> private DataTable GetNewDataTable(DataTable dt, string condition) { DataTable newdt = new DataTable(); newdt = dt.Clone(); DataRow[] dr = dt.Select(condition); for (int i = 0; i < dr.Length; i++) { newdt.ImportRow((DataRow)dr[i]); } return newdt;//返回的查询结果 } //方法二 /**//// <summary> /// 执行DataTable中的查询返回新的DataTable /// </summary> /// <param name="dt">源数据DataTable</param> /// <param name="condition">查询条件</param> /// <returns></returns> private DataTable GetNewDataTable(DataTable dt, string condition) { DataTable newdt = new DataTable(); newdt = dt.Clone(); DataRow[] rows = dt.Select(condition); foreach (DataRow row in rows) { newdt.Rows.Add(row.ItemArray); } return newdt; }