zoukankan
html css js c++ java
通过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;
}
查看全文
相关阅读:
FPGA实现USB2.0同步读数据传输且用chipscop抓取波形(3)
FPGA实现对USB2.0的同步数据传输及USB2.0固件配置(2)
通过MATLAB实现图像数据转换成.bin格式在USB2.0上传输(1)
【转】ssh免密码登录的原理
【转】ssh登录原理以及ssh免密码登陆
Windows与VMware中的CentOS系统互通访问
第十一章 条件逻辑
第十章 再谈连接
第九章 子查询
第八章 分组和聚集
原文地址:https://www.cnblogs.com/furenjun/p/excel.html
最新文章
postman接口超时设置,用于debug等断点调试
TCP/IP三次握手协议
plsql打开报错:Control 'dxDockBrowserPanel' has no parent window问题解决
oracle数据库锁表后的处理方案
appium(二)安装(Android)
python常见面试题讲解(十三)字串的连接最长路径查找
python常见面试题讲解(十二)句子逆序
appium(一)简介
python常见面试题讲解(十一)字符串反转-五种解法
Liunx常用操作(八)-sed命令详细说明
热门文章
openstack系列文章(三)
自动化运维工具 Ansible
openstack系列文章(二)
openstack系列文章(一)
FPGA基于 DDR IP Core Example自己搭建仿真平台(5)
数学建模3德尔菲模型
FPGA基于ISE的DDR3的IP核调用以及历程仿真(4)
数学建模2之迪杰特斯拉算法(上)
建模算法学习1
基于FPFAI的 SP外设驱动ADF4351(状态机编写)
Copyright © 2011-2022 走看看