1、公共方法:
/// <summary>
/// 操作Access数据库
/// </summary>
/// <param name="sql">SQL语句(查询、更新、插入、删除……)</param>
/// <param name="dataFilePath">Access文件路径</param>
/// <returns></returns>
static public int updateAccessTable(string sql, string dataFilePath)
{
OleDbConnection connct = new OleDbConnection();
string oleDB = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dataFilePath;
connct.ConnectionString = oleDB;
OleDbCommand myCommand = new OleDbCommand(sql, connct);
try
{
connct.Open();
int res = myCommand.ExecuteNonQuery();
connct.Close();
return res;
}
finally
{
connct.Dispose();
myCommand.Dispose();
}
}
2、批量更新的Sql语句(使用B表数据批量更新A表数据)
string mdbpath=@'D:/test.mdb';
string sql="update A表 a inner join B表 b on a.ID=b.ID set a.name=b.name,a.age=b.age,a.sex='男'";
updateAccessTable(sql,mdbpath);
3、批量插入的Sql语句1(将一个数据库中的B表数据批量插入另一个数据库中的A表)
string mdbpath=@'D:/test.mdb';
string Output_path=@'D:/test2.mdb';
string sql="insert into A表(name,age) Select name,age from [;database=" + Output_path + "].B表";
updateAccessTable(sql,mdbpath);
4、批量插入的Sql语句2(将B表数据和C表数据批量插入A表)
string mdbpath=@'D:/test.mdb';
string sql="insert into A表(name,salary) Select name,salary from (Select b.name,c.salary from B表 b,C表 c where b.ID=c.ID)";//等价inner join
updateAccessTable(sql,mdbpath);
//注意事项:表b和表C要求是一对一,一对多、多对一或者多对多都会造成查询结果重复。
//inner join:仅显示匹配数据
//left join:左表全部显示
//right join:右表全部显示
//outer join:左右表全部显示
补充:SQL的几种连接:https://www.cnblogs.com/zxlovenet/p/4005256.html
5、批量插入的Sql语句3(插入指定值)
string mdbpath=@'D:/test.mdb';
string sql="insert into A表(name,salary) values('Lucy','1200$')";//单条数据插入
updateAccessTable(sql,mdbpath);
//全表插入可以省略列名
string sql="insert into A表 values('Lucy','1200$','女','25')";
//全表批量插入
string sql="insert into A表 values('Lucy','1200$','女','25'),('Mary','1300$','女','23')";
6、生成临时表并删除
string mdbpath=@'D:/test.mdb';
string Output_path=@'D:/test2.mdb';
string sql="select name,age,sex into 临时表 from A表";//生成临时表
updateAccessTable(sql,mdbpath);
//删除临时表
string sql="drop table 临时表";
7、删除表中的某一行或者某一列
string mdbpath=@'D:/test.mdb';
string Output_path=@'D:/test2.mdb';
string sql="delete from A表 where ID=1";//删除某一行
updateAccessTable(sql,mdbpath);
//删除某一列
string sql="alter table A表 drop column sex";
//删除多列
string sql="alter table A表 drop column sex,age,salary";
8、添加各种类型的字段
string mdbpath=@'D:/test.mdb';
string Output_path=@'D:/test2.mdb';
string sql="alter table A表 add Length double default 0";//增加数字字段,双精度型,缺省值为0
updateAccessTable(sql,mdbpath);
//补充增加字段:
string sql="alter table [表名] add 字段名 smallint default 0";// 增加数字字段,整型,缺省值为0。
string sql="alter table [表名] add 字段名 int default 0 ";//增加数字字段,长整型,缺省值为0。
string sql="alter table [表名] add 字段名 single default 0 ";//增加数字字段,单精度型,缺省值为0。
string sql="alter table [表名] add 字段名 double default 0 ";//增加数字字段,双精度型,缺省值为0。
string sql="alter table [表名] add 字段名 Tinyint default 0 ";//增加数字字段,字节型,缺省值为0。
string sql="alter table [表名] add 字段名 text [null] ";//增加备注型字段,[null]可选参数。
string sql="alter table [表名] add 字段名 memo [null] ";//增加备注型字段,[null]可选参数。
string sql="alter table [表名] add 字段名 varchar(N) [null] ";//增加变长文本型字段大小为N(1~255)。
string sql="alter table [表名] add 字段名 char [null] ";//增加定长文本型字段大小固定为255。