通过OleDB连接方式,访问Access,Excel数据库.
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;
}
转载于:https://www.cnblogs.com/furenjun/archive/2008/02/15/excel.html
通过OleDB连接方式,访问Access,Excel数据库.相关推荐
- 使用JDBC-ODBC桥接方式访问Access数据库(实例)
<!-- 使用JDBC-ODBC桥接方式访问Access数据库 --> <% String drivername="sun.jdbc.odbc.JdbcOdbcDriver ...
- 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 ...
- vs2008 MFC访问Access 2010数据库
MSDN给出了各种语言访问Access 2010的详细介绍:点击打开链接.下图列出了各种语言访问Access 2010的接口. 我在VS2008下使用MFC下的ODBC相关接口访问Access 201 ...
- 8千多英语语法练习题ACCESS\EXCEL数据库
本来是想找有的朋友需要的英文版百科智力问答的数据,但找了许久也没有找到智力问答英文版的数据,反而找到了一些其他的数据,比如今天这份记录数有8千多条的英文语法数据库,这份数据库很不错,不但分类详细,有级 ...
- java数据库的连接方式_java与各个数据库的连接方式
1.与mysql数据库连接方式 通过配置文件的方式进行获取mysql的username.password.url,等相关数据 //调用jdbc.properties参数文件此时获取的是一个io流的形式 ...
- 7千多儿童故事网ACCESS\EXCEL数据库
话不多说,直接上图,截图下方有显示"共有记录数",截图包含了表的所有字段列.该数据有ACCESS数据库文件(扩展名是MDB)以及EXCEL文件(扩展名是XLS). 分类统计情况:睡 ...
- 1千6百多甲骨文汉字对应表ACCESS\EXCEL数据库
甲骨文,是商代(公元前1400)的文字.这些文字因为刻在兽骨或龟甲上,故名甲骨文.文字是以契刀刻划的,故又名"契文""契刻".文字的内容,除极少数属於记事外,大 ...
- html连接accdb文件,解决Access连接accdb不可识别的数据库格式异常
在Access07之前的数据库后缀名均为*.mdb 而连接字符串写成 Provider= Microsoft.Jet.OLEDB.4.0 ;Data Source=C:\myFolder\*. mdb ...
- 1、解决Access连接 accdb 不可识别的数据库格式异常
2003版本的Access数据库后缀名均为*.mdb 则链接写成Provider=Microsoft.Jet.OLEDB.4.0字符串: public static string dbPath = & ...
最新文章
- MySQL数据库中文模糊检索问题
- Web Service 之WSDL文档简介
- 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY9-聚类
- 智能实验室-全能优化(Guardio) 4.0.0.700 新春贺岁版
- 1.将cocos2d-x项目移植到Linux环境下,将cocos2d-x项目移植到手机上
- ns3 入门案例2:third.cc
- 前端学习(2026)vue之电商管理系统电商系统之实现分页功能
- 帆软报表(finereport)常用函数
- 名言名人2008-11-22
- 其实,我被 Fenng 拉黑过!
- 理解拉普拉斯平滑 Laplace Smoothing
- 数据降维——因子分析
- SWFUpload使用指南
- 软约束、硬约束、Minimum Snap的轨迹优化方法
- 极豆科技加入飞桨技术伙伴计划,共筑智能网联汽车新生态
- 为什么用功率谱密度来描述随机信号?
- 微信小程序 如何获取时间
- Git配置免密登录及常用操作的详细教程(基于Gitee平台)
- it方面的证书 计算机软件,计算机及IT技术认证类型
- 黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
热门文章
- 类的公有类型(public)和私有类型(private)
- linux, configure --prefix=/有什么用
- html5 测试用例,Web 测试通用测试用例
- python列表元素替换的数据结构_Python基础学习数据结构(第2讲:列表;第2讲:列表创建、添加元素、插入元素、替换元素、删除元素、其他常用方法和列表派生),第二,主讲,追加,推导,式...
- mongoDB分页的两种方法
- 投资级别(Investment Grade)
- Jmeter+ant运行脚本,得到HTML报告
- Safair css hack
- 前端逼死强迫症系列之javascript续集
- unity3d 多人寻路堵塞堆叠问题