使用List,Dictionary加载数据库中的数据

情景描述:数据库中有一张设备表,字段DWDM存放的是各个厂编号,字段ZNBH存放的是设备编号。其中DWDM跟ZNBH是一对多的关系。需要将数据库中的值加载到List<Dictionary<string,List<string>> 中。

其中内部List<string>存放的是一个站内编号ZNBH,Dictionary<string,List<string>> 存放的是一个厂的DWDM和所有的站内编号ZNBH,

List<Dictionary<string,List<string>>中存放的是各个厂的各台设备。

数据库中数据如下:

案例分析:根据题意,结合以上具体数据,可知数据库中存放了这样的数据

List<string> list=new List<string>()

{

"01","02","SL"

};

Dictionary<string,List<string>>  dic=new Dictionary<string,List<string>>();

dic.add("30202419",list);

List<Dictionary<string,List<string>>> result=new List<Dictionary<string,List<string>>>();

result.add(dic);

这里关键是创建List<string>的时机 - 某个厂的第一台设备,将dic加入结果集的时机 - 某个厂的最后一台设备。

代码实现

 public List<Dictionary<string, List<string>>> GetDwdmZnbhList(int type)
        {
            List<Dictionary<string, List<string>>> result = null;
            string sql = @"select dwdm,znbh   from sysconfig_llwh where jclx={0} group by dwdm, znbh  order by dwdm";
            sql = String.Format(sql, type);
            DataTable dt = DBDataAccess.GetInstance().GetDataTable(SysConfig.TargetConnectionString, sql);

            string dwdm_pre = String.Empty;
            string dwdm = String.Empty;
            string dwdm_next = String.Empty;
            string znbh = String.Empty;

            Dictionary<string, List<string>> dic = null;
            List<string> list = null;
            result = new List<Dictionary<string, List<string>>>();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                //为本行前面的单位代码赋值
                if (i == 0)
                    dwdm_pre = "";
                else
                    dwdm_pre = dt.Rows[i - 1]["DWDM"].ToString();
                //为本行单位代码赋值
                dwdm = dt.Rows[i]["DWDM"].ToString();
                //为本行后面行的单位代码赋值
                if (i != dt.Rows.Count - 1)
                    dwdm_next = dt.Rows[i + 1]["DWDM"].ToString();
                else
                    dwdm_next = "";
                if (dwdm_pre != dwdm)
                {
                    //在谋厂第一台设备时,创建List,Dic
                    list = new List<string>();
                    dic = new Dictionary<string, List<string>>();
                    dwdm = dt.Rows[i]["DWDM"].ToString();
                    znbh = dt.Rows[i]["ZNBH"].ToString();
                    list.Add(znbh);
                    dic.Add(dwdm, list);
                    if (dwdm != dwdm_next)
                        result.Add(dic);
                }
                else
                {

                    znbh = dt.Rows[i]["ZNBH"].ToString();
                    list.Add(znbh);
                    dic.Clear();
                    dic.Add(dwdm, list);
                   //在谋厂最后一台设备时,将Dic 加入List中
                    if (dwdm != dwdm_next)
                        result.Add(dic);
                }
            }
            return result;
        }
时间: 2024-10-16 01:42:25

使用List,Dictionary加载数据库中的数据的相关文章

MVC4中AJAX Html页面打开调用后台方法实现动态加载数据库中的数据

之前一直用window.onload方法来调用js方法来实现,今天纠结能不能换个方法实现. 很明显是可以的. 在html前台页面引用js代码如下 @Scripts.Render("~/Scripts/User/AddUser.js") 这就算引用了,看adduser.js代码如果调用后台方法 $(document).ready( function (){ $.ajax({ type: 'POST', url: "/EditUserPassWord/UserGroupQuery

ajax数据加载过程中进行数据加载提示

方法1:$(function(){ $.get("URL", function(Msg){ $("你要显示提示的地方").html("数据正在加载中.."); $("你要显示查询数据的地方").html(Msg); }); }); 方法2: <html><head> <title></title></head><body><input type=&q

通过在jquery中添加函数发送ajax请求来加载数据库数据,以json的格式发送到页面

通过在jquery中添加函数发送ajax请求来加载数据库数据,以json的格式发送到页面 从数据库中查询仓库信息,显示在下拉菜单中: 首先,引入js插件,这里使用jquery-1.8.3.js <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.8.3.js"></script> 当页面加载完成后,就应该发送ajax请求到数据库,

使用FMDB框架来加载数据库

1.打开数据库 先要获取沙盒的数据库文件名,并创建数据库文件名,定数据库: @property (nonatomic, strong) FMDatabase *db; // 0.获得沙盒中的数据库文件名 NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"

ajax验证表单元素规范正确与否 ajax展示加载数据库数据 ajax三级联动

一.ajax验证表单元素规范正确与否 以用ajax来验证用户名是否被占用为例 1创建表单元素<input type="text" id="t"> 2在js中用keyup事件来进行操作 3创建ajax格式和内容:格式: $.ajax({ url:"哪一个服务端处理器", data:{"自己起名",所需要传给处理器的数据}, type:"post", dataType:"json"

Spring:启动项目时加载数据库数据(总结)

在项目中需要启动程序时,要将数据库的用户信息表加载到内存中,找到一下几种方式. 1.实现ApplicationListener接口,重写onApplicationEvent方法,可以在项目启动的时候执行该方法. @Component("userInit") public class UserInit implements ApplicationListener { public static Map<String,User> map=new HashMap<Strin

为什么在加载数据库驱动包的时候有用的是Class.forName( ),却没有调用newInstance( )?

在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法. 通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类. 通常编码过程中,在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作.因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象. 有数据库开发经验朋友会发现,为什么在我们加载数据库驱动包的时候有的却没有调

Android之数据存储----使用LoaderManager异步加载数据库

一.各种概念: 1.Loaders: 适用于Android3.0以及更高的版本,它提供了一套在UI的主线程中异步加载数据的框架.使用Loaders可以非常简单的在Activity或者Fragment中异步加载数据,一般适用于大量的数据查询,或者需要经常修改并及时展示的数据显示到UI上,这样可以避免查询数据的时候,造成UI主线程的卡顿. 即使是查询SQLite数据库,用Loaders来操作会更加的简便. Loaders有以下特点: 可以适用于Activity和Fragment. 可以提供异步的方式

Android-LoaderManager异步加载数据库数据

LoaderManager异步加载数据库数据,是在(Activity/fragment/其他UI等) 加载大量的本地Database库表数据,由于数据大在加载过程中会导致UI线程阻塞,导致用户体验不好,Android为来解决这个问题,就设计了LoaderManager异步加载数据库数据 以前我在深圳做项目的时候,公司研发的APP是给中国联通人员在山上工作办事的,对这款APP要求离线数据,大量的离线数据(成百上千条)都是存储在本地Database表里面的,常常在查询本地Database数据的时候,