首页 > 数据库 >C#复制Access数据库表结构和数据到另一个数据库表

C#复制Access数据库表结构和数据到另一个数据库表

时间:2023-06-29 16:26:13浏览次数:37  
标签:table2 C# 数据库 Access writeTable 表名 DataTable oleDap

一、参考资料(以下为AccessSQL语句)

参考原文链接

1.1.复制表

select * into table2 from table1
--创建了一张新表:table2 ,把table1表中的所有数据 连同表结构都一并复制 到table2中
--可以再通俗的理解为,先复制了个一模一样的表,然后把表名改成table2了
truncate table table2
--清空该表中的所有数据
insert into table2 select * from table1 
--把table1表中的数据复制到table2中,这个前提是 table2表已存在,表结构与table1相同

如果table2与table1结构不相同↓↓↓

insert into table2 (column1, column2, column3) select column1, column2, column3 from table1

 

1.2.跨文件查询表,如果是同一台机器上,可以使用如下两种方式访问另一个MDB:

参考原文链接

(1)其中表名是在db2中的表名
SELECT   *   from   表名   in   'C:\db2.mdb '

(2)其中表名是在db2中的表名
select   *   from   [;database=C:\db2.mdb].表名

追加到本机的另一个MDB中:

insert   into   目标MDB的表名(字段列表)   in   'C:\db2.mdb '     select   字段列表   from   当前MDB的表名
或
insert   into   [;database=C:\db2.mdb].目标MDB的表名(字段列表)     select   字段列表   from   当前MDB的表名

 

二、C#跨数据库复制表方法;CommandSQL为自定义方法

        /// <summary>
        /// 将另外的数据库表复制到当前数据库连接对象,创建一个相同结构相同数据指并指定名称的表
        /// </summary>
        /// <param name="newTableName">当前数据库连接创建的新表名称</param>
        /// <param name="sourceTableName">复制源数据库表的名称</param>
        /// <param name="sourceSqlPath">源数据库路径</param>
        /// <param name="sourceSqlName">源数据库名称</param>
        /// <returns>若源数据库不存在或异常返回false,否则返回true</returns>
        public bool CopyDataTable(string newTableName, string sourceTableName, string sourceSqlPath, string sourceSqlName)
        {
            try
            {
                if (File.Exists(sourceSqlPath + sourceSqlName + ".mdb"))
                {
                    CommandSQL("SELECT * into " + newTableName + " from " + sourceTableName + " in '" + @sourceSqlPath + sourceSqlName + ".mdb'");
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show("复制数据库 " + sourceSqlPath + sourceSqlName + " 的 " + sourceTableName + " 表时发生异常:\r\n\r\n" + ex.Message);
                return false;
            }
        }

 

三、C#快速将DataTable写入access数据库表方法

        /// <summary>
        /// 将与指定的数据库表相同结构的DataTable表数据快速更新到数据库中
        /// </summary>
        /// <param name="sqlPath">数据库路径</param>
        /// <param name="sqlName">数据库名称(无需填入后缀)</param>
        /// <param name="tableName">数据库表名</param>
        /// <param name="updateTable">与数据库表相同结构的DataTable数据表</param>
        /// <returns>更新成功返回true,失败或异常返回false</returns>
        public static bool UpdateDataTable(string sqlPath, string sqlName, string tableName, DataTable updateTable)
        {
            try
            {
                if (File.Exists(sqlPath + sqlName + ".mdb"))
                {
                    using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sqlPath + sqlName + ".mdb"))
                    {
                        conn.Open();
                        OleDbDataAdapter oleDap = new OleDbDataAdapter("select * from " + tableName, conn);
                        OleDbCommandBuilder oleCbd = new OleDbCommandBuilder(oleDap);
                        DataTable writeTable = new DataTable();
                        oleDap.Fill(writeTable);

                        for (int r = 0; r < updateTable.Rows.Count; r++)
                        {
                            DataRow wDr = writeTable.NewRow();
                            for (int c = 0; c < updateTable.Columns.Count; c++)
                            {
                                wDr[c] = updateTable.Rows[r][c];
                            }
                            writeTable.Rows.Add(wDr);
                        }
                        oleDap.UpdateCommand = oleCbd.GetUpdateCommand();
                        oleDap.Update(writeTable);
                    }
                    return true;
                }
                else//数据库文件不存在,直接返回false
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("更新数据库 " + sqlPath + sqlName + " 的 " + tableName + " 表时发生异常:\r\n\r\n" + ex.Message);
                return false;
            }
        }

        /// <summary>
        /// 将与指定的数据库表相同结构的DataTable表数据快速更新到数据库中
        /// </summary>
        /// <param name="tableName">数据库表名</param>
        /// <param name="updateTable">与数据库表相同结构的DataTable数据表</param>
        /// <returns>更新成功返回true,失败或异常返回false</returns>
        public bool UpdateDataTable(string tableName, DataTable updateTable)
        {
            try
            {
                OleDbDataAdapter oleDap = new OleDbDataAdapter("select * from " + tableName, useConn);
                OleDbCommandBuilder oleCbd = new OleDbCommandBuilder(oleDap);
                DataTable writeTable = new DataTable();
                oleDap.Fill(writeTable);

                for (int r = 0; r < updateTable.Rows.Count; r++)
                {
                    DataRow wDr = writeTable.NewRow();
                    for (int c = 0; c < updateTable.Columns.Count; c++)
                    {
                        wDr[c] = updateTable.Rows[r][c];
                    }
                    writeTable.Rows.Add(wDr);
                }
                oleDap.UpdateCommand = oleCbd.GetUpdateCommand();
                oleDap.Update(writeTable);
                oleCbd.Dispose();
                oleDap.Dispose();
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("更新数据库的 " + tableName + " 表时发生异常:\r\n\r\n" + ex.Message);
                return false;
            }
        }

 

标签:table2,C#,数据库,Access,writeTable,表名,DataTable,oleDap
From: https://www.cnblogs.com/Kirito-Asuna-Yoyi/p/UsingAccessCopyTable.html

相关文章

  • celery
    1Celery架构,介绍#Celery:芹菜(跟翻译没有任何关系),分布式异步任务框架,框架(跟其他web框架无关)#Celeryisaprojectwithminimalfunding,sowedon’tsupportMicrosoftWindows.Pleasedon’topenanyissuesrelatedtothatplatform.#架构 -broker:任务中间件,用户提......
  • Kubernetes编程——client-go基础—— 工作队列(workqueue)
    工作队列(workqueue[wɜːk][kjuː])https://github.com/kubernetes/kubernetes/tree/release-1.27/staging/src/k8s.io/client-go/util/workqueue我理解意思是说:这里说的"工作队列"指的一个数据结构。用户可以按照队列所预定义的顺序向这个队列中添加和取出......
  • word文档的图片怎么保存到动易CMS上
    ​ 由于工作需要必须将word文档内容粘贴到编辑器中使用但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直接解决这个问题考虑到自己除了工作其他时间基本上不使用windows,因此打算使用nodejs来解......
  • CentOS安装Redis-5.0.14
     注:以下所有操作均在CentOS7.9x86_64位系统下完成。 #准备工作#在安装Redis之前,请确保已经使用yum安装了以下基础组件:makegccgcc-c++kernel-devel #Redis的安装#开始下载Redis并进行编译安装:wgethttp://download.redis.io/releases/redis-5.0.14.tar.gztar......
  • Threading in C#, Joseph Albahari
    ThreadinginC#JosephAlbahariPART1Part2Part3Part4Part5GETTINGSTARTEDBasicSynchronizationUsingThreadsAdvancedThreadingParallelProgrammingLastupdated:2011-4-27Translations: Chinese | Czech | Persian | Russian | JapaneseDo......
  • Could not resolve com.android.support:support-v4:24.1.1+
    错误: 解决:打包的平台文件夹下找到project.properties文件将文件中对应报错的版本注释掉就可以了 ......
  • OpenCV 自适应中值滤波及实现
    中值滤波器(MedianFilter)中值滤波的思想就是比较一定领域内的像素值的大小,取出其中值作为这个领域的中心像素新的值。假设对一定领域内的所有像素从小到大进行排序,如果存在孤立的噪声点,比如椒盐噪声(椒噪声——较小的灰度值,呈现的效果是小黑点;盐噪声——较大的灰度值,呈现的效果......
  • EXCEL表格,当字段值超出单元格的区域时,如何不显示??
    问题阐述:当导出Excel表格的数据中的某一列字段的值超过单元格可以展示的范围,并且在Excel表格中展示为如下:最终结果展示如下: 解决过程:1、选中执行的单元格2、右键选中“设置单元格格式”3、点击“对齐”,在水平对齐-选中“填充”。4......
  • celery介绍
    简介Celery是使用python编写的分布式任务调度框架。celery能做什么Celery是一个强大的分布式任务队列框架,它可以与Python应用程序一起使用,提供了异步任务处理和分布式消息传递的能力。以下是Celery框架的一些主要功能和用途:异步任务处理Celery可以将耗时的任务放......
  • Windows PowerShell Compatibility
    背景Win1121H2(OSBuild22000.2124)WindowsPowerShell7.3.5简述在试用PowerShell7.x时,部分命令仍需PS5.1.具体来说,是指%windir%\system32\WindowsPowerShell\v1.0\Modules下的Module[2],例如Appx的Get-AppxPackage.Unlessthemodulemanifestindicatesth......