代码编织梦想

 本人是资深C# Web开发从业者,今天同事跟我提了一个小小的需求,因为他是设计出身半路出家做二次开发,业务很熟但是开发基础薄弱。

他的需求如下:

1、一次获取access数据库所有表数据dataset

2、写一个方法,传入表名返回表数据datatable(这个需求可能是因为同事不会写sql语句)

一、先上第一个需求的源码:

        public static DataSet GetData()
        {
            string mdbPath = @"D:\NXOPEN\application\Common\PARAM-NG\Dbs\Mould\Lkm\Lkm.mdb";
            SlqHelper helper = new SlqHelper();
            DataSet ds = helper.GetAllTable(mdbPath);
            return ds;
        }

        /// <summary>
        /// 一次获取access数据库所有表数据
        /// </summary>
        /// <param name="dbSource"></param>
        /// <returns></returns>
        public DataSet GetAllTable(string dbSource)
        {
            DataSet ds = new DataSet();
            DataTable dtTableName = new DataTable();
            string sqlStr = string.Format(@"SELECT MSysObjects.Name FROM MsysObjects  WHERE (Left([Name],1)<>'{0}') AND (Left$([Name],4) <> '{1}') AND (MSysObjects.Type)=1", "~", "Msys");
            dtTableName = GetDt(sqlStr, dbSource);
            for(int i=0; i< dtTableName.Rows.Count; i++)
            {
                string tablename = dtTableName.Rows[i]["Name"].ToString();
                DataTable dt = new DataTable(tablename);
                dt = GetDtByTableName(tablename, dbSource);
                dt.TableName = tablename;
                ds.Tables.Add(dt.Copy());
            }
            return ds;
        }

        public DataTable GetDt(string sql, string dbSource)
        {
            ConStr = string.Format(ConStr, dbSource);
            oleCon = new OleDbConnection(ConStr);

            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            OleDbDataAdapter oleDap = new OleDbDataAdapter(sql, oleCon);
            oleDap.Fill(ds, "table");
            dt = ds.Tables[0];
            return dt;
        }

        /// <summary>
        /// 根据access数据库文件和表名,获取表数据
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="dbSource">数据库文件地址</param>
        /// <returns></returns>
        public DataTable GetDtByTableName(string tableName, string dbSource)
        {
            ConStr = string.Format(ConStr, dbSource);
            oleCon = new OleDbConnection(ConStr);

            string sql = string.Format("select * from {0}",tableName);
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            OleDbDataAdapter oleDap = new OleDbDataAdapter(sql, oleCon);
            oleDap.Fill(ds, "table");
            dt = ds.Tables[0];
            return dt;
        }

大概思路如下:

1)链接access数据库,获取所有表名

2)根据表名获取每张表数据

3)把表数据塞进dataset,并返回需要的数据

点评:一次获取所有表数据,如果db比较小跑起来还是没问题的,万一db数据量比较大,内存瞬间崩溃。所以我推荐他用下面的方法,需要哪张表数据,根据表名去拿就好。

二、第二个需求的源码如下:

        /// <summary>
        /// 根据access数据库文件和表名,获取表数据
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="dbSource">数据库文件地址</param>
        /// <returns></returns>
        public DataTable GetDtByTableName(string tableName, string dbSource)
        {
            ConStr = string.Format(ConStr, dbSource);
            oleCon = new OleDbConnection(ConStr);

            string sql = string.Format("select * from {0}",tableName);
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            OleDbDataAdapter oleDap = new OleDbDataAdapter(sql, oleCon);
            oleDap.Fill(ds, "table");
            dt = ds.Tables[0];
            return dt;
        }

三、个人建议,还是用sql比较方便,灵活,也把基本代码贴出来供大家参考

        /// <summary>
        /// 获取表数据demo
        /// </summary>
        /// <returns></returns>
        public static DataTable GetDataDemo()
        {
            string sql = "select * from Materials;select * from Materials;";
            string mdbPath = @"D:\NXOPEN\application\Common\PARAM-NG\Materials.mdb";
            SlqHelper helper = new SlqHelper(mdbPath);
            DataTable dt = helper.GetDt(sql);
            return dt;
        }

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/MarcoPro/article/details/128017635

“第一次亲密接触”——项目遇到的问题有奖征文活动(已结束)_iteye_11539的博客-爱代码爱编程

为继续活跃CSDN博客频道广大博友的互动,CSDN博客频道特举办9月 “第一次亲密接触”——项目遇到的问题有奖征文活动。发博文谈谈你第一次接触项目时遇到的问题,即可参与活动,将有机会获赠最新 IT类畅销图书或程序员杂志!你遇到哪些技术问题?有哪些感触?有哪些经验与大家分享! 让我们一起畅所欲言吧!

第一次亲密接触 ——项目遇到的问题有奖征文活动 已结束)_这个是傻傻的的博客-爱代码爱编程

                为继续活跃CSDN博客频道广大博友的互动,CSDN博客频道特举办9月 “第一次亲密接触”——项目遇到的问题有奖征文活动。发博文谈谈你第一次接触项目时遇到的问题,即可参与活动,将有机会获赠最新 IT类畅销图书或程序员杂志!你遇到哪些技术问题?有哪些感触?有哪些经验与大家分享! 让我们一起畅所欲言

选择视图里圆弧,创建坐标原点_nxopen-ug二次开发_新浪博客_nx胡君的博客-爱代码爱编程

★选择视图里圆弧,创建坐标原点 //设置选择的实体类型 static int init_proc( UF_UI_selection_p_t select, void *user_data ) { int  errorCode   = 0;

oracle错误一览表(转)-爱代码爱编程

ORA-00001: 违反唯一约束条件 (.)ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数 ()ORA-00021: 会话附属于其它某些进程;无法转换会话ORA-00022: 无效的会话 ID;访问被拒绝ORA-00023: 会话引

求矩形中心点的坐标c语言,判断面半径,类型轴中心极点坐标-爱代码爱编程

判断面半径,类型轴中心极点坐标 UF_MODL_ask_face_data 判断面类型 圆柱或圆锥等等轴中心方向 极点坐标 半径 大小 //设置选择的实体类型 static int init_proc( UF_UI_selection_p_t select, void *user_data ) { int  errorCode  = 0;

Unity+Android GET和POST方式的简单实现API请求(人像动漫化)-爱代码爱编程

Unity与Android的简单交互,Unity打开Android相册并调用 前端时间本想着去弄个小工具,就是图文生成视频,可是这个的API接口的调用的测试权限死活申请不下来,只能放弃,就顺道看了下BaiduAI,竟然被我发现了一个很有趣的API接口。人像动漫化,于是就想着整一个人像动漫化APP,主要功能就是通过获取手机相册中的图片进行人像动漫化并保存在

weops上新|v3.12版本提升网络设备的自动化能力_嘉为蓝鲸的博客-爱代码爱编程

本次WeOpsV3.12版本更新主题总结为: 持续补充自动发现能力,覆盖网络设备和数据库扩充自动化运维,支持网络设备脚本工具内置AD账号自动化流程,支持AD账号创建/密码重置/删除增加监控告警移动端,覆盖更多场景优化凭据管理,逐渐实现WeOps平台凭据管理一体化监控告警以及其他模块持续优化 ▲ 本次更新优化模块 01. 资产自动发现采集

2022大厂面试秘籍java岗:中间件+算法+http+线程+虚拟机+分布式_啊码的博客-爱代码爱编程

前言 很多朋友对面试不够了解,不知道如何准备,对面试环节的设置以及目的不够了解,因此成功率不高。通常情况下校招生面试的成功率低于1%,而社招的面试成功率也低于5%,所以对于候选人一定要知道设立面试的初衷以及每个环节的意义,

remote_exec_5msg57.9se7.cc-爱代码爱编程

                                           ==Phrack Inc.==               Volume 0x0b, Issue 0x3e, Phile #0x08 of 0x10 |=-----=[ FIST! FIST! FIST! Its all in the wrist: Remote Ex