通过OleDB连接方式,访问Access,Excel数据库.
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 是已保存有数据的DataSet
if (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];
        }

=======表的复制=========
//创建新表dataTableDest
DataTable 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;
        }






posted on 2008-02-15 18:13 DotNet编程 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/furenjun/archive/2008/02/15/excel.html

通过OleDB连接方式,访问Access,Excel数据库.相关推荐

  1. 使用JDBC-ODBC桥接方式访问Access数据库(实例)

    <!-- 使用JDBC-ODBC桥接方式访问Access数据库 --> <% String drivername="sun.jdbc.odbc.JdbcOdbcDriver ...

  2. asp通用数据库连接类 access mssql mysql_asp.net 连接mssql mysql access Excel 2007数据库

    asp教程.net 连接mssql mysql教程 access  excel 2007数据库教程 本文章收藏了了一款asp.net教程 连接mssql mysql access  excel 200 ...

  3. vs2008 MFC访问Access 2010数据库

    MSDN给出了各种语言访问Access 2010的详细介绍:点击打开链接.下图列出了各种语言访问Access 2010的接口. 我在VS2008下使用MFC下的ODBC相关接口访问Access 201 ...

  4. 8千多英语语法练习题ACCESS\EXCEL数据库

    本来是想找有的朋友需要的英文版百科智力问答的数据,但找了许久也没有找到智力问答英文版的数据,反而找到了一些其他的数据,比如今天这份记录数有8千多条的英文语法数据库,这份数据库很不错,不但分类详细,有级 ...

  5. java数据库的连接方式_java与各个数据库的连接方式

    1.与mysql数据库连接方式 通过配置文件的方式进行获取mysql的username.password.url,等相关数据 //调用jdbc.properties参数文件此时获取的是一个io流的形式 ...

  6. 7千多儿童故事网ACCESS\EXCEL数据库

    话不多说,直接上图,截图下方有显示"共有记录数",截图包含了表的所有字段列.该数据有ACCESS数据库文件(扩展名是MDB)以及EXCEL文件(扩展名是XLS). 分类统计情况:睡 ...

  7. 1千6百多甲骨文汉字对应表ACCESS\EXCEL数据库

    甲骨文,是商代(公元前1400)的文字.这些文字因为刻在兽骨或龟甲上,故名甲骨文.文字是以契刀刻划的,故又名"契文""契刻".文字的内容,除极少数属於记事外,大 ...

  8. html连接accdb文件,解决Access连接accdb不可识别的数据库格式异常

    在Access07之前的数据库后缀名均为*.mdb 而连接字符串写成 Provider= Microsoft.Jet.OLEDB.4.0 ;Data Source=C:\myFolder\*. mdb ...

  9. 1、解决Access连接 accdb 不可识别的数据库格式异常

    2003版本的Access数据库后缀名均为*.mdb 则链接写成Provider=Microsoft.Jet.OLEDB.4.0字符串: public static string dbPath = & ...

最新文章

  1. MySQL数据库中文模糊检索问题
  2. Web Service 之WSDL文档简介
  3. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY9-聚类
  4. 智能实验室-全能优化(Guardio) 4.0.0.700 新春贺岁版
  5. 1.将cocos2d-x项目移植到Linux环境下,将cocos2d-x项目移植到手机上
  6. ns3 入门案例2:third.cc
  7. 前端学习(2026)vue之电商管理系统电商系统之实现分页功能
  8. 帆软报表(finereport)常用函数
  9. 名言名人2008-11-22
  10. 其实,我被 Fenng 拉黑过!
  11. 理解拉普拉斯平滑 Laplace Smoothing
  12. 数据降维——因子分析
  13. SWFUpload使用指南
  14. 软约束、硬约束、Minimum Snap的轨迹优化方法
  15. 极豆科技加入飞桨技术伙伴计划,共筑智能网联汽车新生态
  16. 为什么用功率谱密度来描述随机信号?
  17. 微信小程序 如何获取时间
  18. Git配置免密登录及常用操作的详细教程(基于Gitee平台)
  19. it方面的证书 计算机软件,计算机及IT技术认证类型
  20. 黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

热门文章

  1. 类的公有类型(public)和私有类型(private)
  2. linux, configure --prefix=/有什么用
  3. html5 测试用例,Web 测试通用测试用例
  4. python列表元素替换的数据结构_Python基础学习数据结构(第2讲:列表;第2讲:列表创建、添加元素、插入元素、替换元素、删除元素、其他常用方法和列表派生),第二,主讲,追加,推导,式...
  5. mongoDB分页的两种方法
  6. 投资级别(Investment Grade)
  7. Jmeter+ant运行脚本,得到HTML报告
  8. Safair css hack
  9. 前端逼死强迫症系列之javascript续集
  10. unity3d 多人寻路堵塞堆叠问题