追加到另一个MDB:
insert
into
目标MDB的表名(字段列表)
in
'C:\db2mdb
'
select
字段列表
from
当前MDB的表名
或
insert
into
[;database=C:\db2mdb]目标MDB的表名(字段列表)
select
字段列表
from
当前MDB的表名
里面提到的
目标MDB的表名(字段列表)
AA库中有A,B,C表,
BB库中有A,B,C表,
且:A表中的字段:a,b,c;B表中的字段:aa,bb,cc
索然相应的表的字段一样,但各个表的字段不尽一样,且表很多
这样一个表一个表的表名列表和各个表的字段列表,工作量很大啊
又没有更好的办法去实现合并(或连接)呢?
对我有用[0]丢个板砖[0]引用举报管理TOPwangtiecheng(不知不为过,不学就是错!)等
级:更多勋章
新建表:首先打开或新建一个数据库,在该数据库上使用的构赵函数定义一个对象,在调用Create函数建新表,之后调用Append函数加入数据库:
void()
{
CStringstrSystemDB=
_T("路径");
SetSystemDB(strSystemDB);
//Usernameandpasswordmanuallyadded
//byusingMicrosoftAess
CStringstrUserName=_T("NewUser");
CString=_T("Password");
CString=_T("NewPassword");
(strUserName,);
(strUserName,,
);
}
//设置默认用户和密码
void(CString&strUserName,CString&strPassword)
{
COleVariantvarUserName(strUserName,VT_BSTRT);
COleVariantvarPassword(strPassword,VT_BSTRT);
DAODBEnginepDBEngine=();
ASSERT(pDBEngine!=NULL);
//设置默认用户
DAO_CHECK(pDBEngine->put_DefaultUser(varUserNamebstrVal));
//设置默认密码
DAO_CHECK(pDBEngine->put_(varPasswordbstrVal));
}
///更改密码
void(LPCTSTRpDB,LPCTSTR,LPCTSTR)
{
db;
CStringstrConnect(_T(";pwd="));
//数据库必须打开
//设置密码
dbOpen(pDB,TRUE,FALSE,
strConnectpszOldPassword);
COleVariantNewPassword(pszNewPassword,VT_BSTRT),OldPassword(pszOldPassword,VT_BSTRT);
DAO_CHECK(dbm_pDAODatabase->NewPassword(V_BSTR(&OldPassword),V_BSTR(&NewPassword)));
dbClose();
}
思路很简单,就是先依次获取Excel中表的表名,然后再将Excel表的数据导入到内存以DataTable格式存在,最后再把dataTable数据导入到Mdb数据库文件中。最后实现的功能可以使Excel多表进行导入,如果Mdb数据库文件中已有新建的表, *** 作是先删除数据库中的已存在表,再重新创建表,导数据。
源码:
using System;using SystemCollectionsGeneric;using SystemComponentModel;using SystemData;using SystemDrawing;using SystemLinq;using SystemText;using SystemThreadingTasks;using SystemWindowsForms;using SystemDataOleDb;
namespace TestK
{
public partial class Form1 : Form {
public Form1()
{
InitializeComponent();
}
public int tableNameNum = 0; //记录Excel中所有表的数量 public OleDbConnection connection = new OleDbConnection("Provider=MicrosoftJetOLEDB40;Data Source=C:\\Users\\CES\\Desktop\\CESmdb");
//建立与数据库文件CESmdb的连接
//打开以xls或者xlsx结尾的文件 private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog(); //创建窗体 dlgFilter = "Excel文件 (xls;xlsx)|xls;xlsx"; //浏览过滤出以xls或者xlsx结尾的文件 if(dlgShowDialog() == DialogResultOK)
{
string filePath = dlgFileName; //获取打开文件的路径 thistextBox1Text = filePath;
}
}
//获取Excel中所有表的表名 public string[] GetTableName(string excelFilename)
{
//建立与指定Excel文件的连接 string connectionString = stringFormat("Provider=MicrosoftACEOLEDB120;Data Source={0};Jet OLEDB:Engine Type=35;Extended Properties=Excel 80;Persist Security Info=False", excelFilename);
string[] tableName = new string[20]; //存储Excel中所有表的表名 string temp; //中间变量
using (SystemDataOleDbOleDbConnection connection = new SystemDataOleDbOleDbConnection(connectionString))
{
connectionOpen();
//获取数据库架构信息,包括列、主键、表等信息 DataTable table = connectionGetOleDbSchemaTable(SystemDataOleDbOleDbSchemaGuidTables, null);
for (int i = 0; i < tableRowsCount;i++ )
{
temp = tableRows[i]["Table_Name"]ToString(); //获取Excel中的表名 tableName[i] = tempReplace("$", ""); //因为获取的表名最后会有$符号,所以要替换 }
tableNameNum = tableRowsCount;
connectionClose();
}
return tableName;
}
//获取Excel中每张表的数据,以datatable类型返回 public DataTable GetExcelTable(string excelFilename,string tableName)
{
//建立与指定Excel文件的连接 string connectionString = stringFormat("Provider=MicrosoftACEOLEDB120;Data Source={0};Jet OLEDB:Engine Type=35;Extended Properties=Excel 80;Persist Security Info=False", excelFilename);
DataSet ds = new DataSet(); //数据集 //using中声明的对象connection,在using语句块结束后会自动释放 using (SystemDataOleDbOleDbConnection connection = new SystemDataOleDbOleDbConnection(connectionString))
{
connectionOpen();
//获取数据库架构信息,包括列、主键、表等信息 DataTable table = connectionGetOleDbSchemaTable(SystemDataOleDbOleDbSchemaGuidTables, null);
string strExcel = "select from " + "[" + tableName + "$]";
//打开数据链接,得到一个数据集 OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, connectionString);
//在数据集中查询表名为tableName的表,然后把其数据在装入数据集ds中 adapterFill(ds, tableName);
connectionClose();
}
return dsTables[tableName];//以datatable类型返回数据集ds中表名为tableName的表 }
//判断在数据库中,指定表名的表是否存在 public bool TableExists(string table)
{
bool rythm;
connectionOpen();
//读取表名为table的表的行数信息 rythm = connectionGetSchema("Tables", new string[4] { null, null, table, "TABLE" })RowsCount > 0;
connectionClose();
return rythm;
}
//如果在建表之前,数据库已经存在该表,那么首先要先删除此表 public void DeleteTable(string tableName)
{
string sql = "drop table "+tableName+";";
connectionOpen();
OleDbCommand cmd = new OleDbCommand(sql, connection);
cmdExecuteNonQuery();
connectionClose();
}
//中间类型为dataTable的表数据转换到数据库mdb文件中 public bool dataTableToMdb(string excelPath,string tableName)
{
//获取Excel中表的数据 DataTable dt = GetExcelTable(excelPath,tableName);
//表中数据大于等于两行,数据转入格式才是正确的 if (dtRowsCount >= 2)
{
string[] cloumnName = new string[50];
//获取Excel中表的所有列名 for (int i = 0; i < dtColumnsCount; i++)
{
cloumnName[i] = dtRows[0][i]ToString();
}
//在mdb数据库文件中创建表 string sql = "create table " + tableName + " (" + cloumnName[0] + " varchar null)";
connectionOpen();
OleDbCommand cmd = new OleDbCommand(sql, connection);
cmdExecuteNonQuery();
//在mdb数据库文件中,给已创建好的表添加好所有列 for (int i = 1; i < dtColumnsCount; i++)
{
sql = "alter table " + tableName + " add " + cloumnName[i] + " varchar null";
cmd = new OleDbCommand(sql, connection);
cmdExecuteNonQuery();
}
//在mdb数据库文件中,给已创建好的表加入数据 for (int t = 1; t < dtRowsCount; t++)
{
sql = "insert into " + tableName + " values('";
for (int k = 0; k < dtColumnsCount; k++)
{
if (k != dtColumnsCount - 1)
{
sql = sql + dtRows[t][k]ToString() + "','";
}
else {
sql = sql + dtRows[t][k]ToString() + "')";
}
}
cmd = new OleDbCommand(sql, connection);
cmdExecuteNonQuery();
}
connectionClose();
return true;
}
else {
MessageBoxShow("Excel中"+ tableName +"表的原始数据格式不正确!");
}
return false;
}
private void button2_Click(object sender, EventArgs e)
{
int flag = 1; //判断由Excel表导入到Mdb是否成功的标记变量
以上就是关于将一个Access数据库中多表的数据导入(合并到)另一个Access数据库的相应表中全部的内容,包括:将一个Access数据库中多表的数据导入(合并到)另一个Access数据库的相应表中、如何建立mdb数据库、excel格式文件怎么导入至mdb文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)