查询和新增

本文详细介绍了使用Visual Studio 2015和ASP.NET MVC进行数据查询及新增操作的方法,包括如何在控制器中编写查询语句、实例化模型、定义查询范围变量、直接访问数据、创建和实例化类、给字段赋值、自定义变量以及新增数据的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询和新增
开发工具与关键技术:Visual Studio 2015 、ASP.NET MVC
作者:张米
撰写日期:2019年5月15日
怎么在vs查询数据呢?
在说查询语句的具体方法前,提两个常识。
1、 查询语句写在控制器的页面;
2、 查询语句写在控制器的一个方法里面;
在这里插入图片描述
3、 定义一个方法时,内部不写一些代码就会报错:
在这里插入图片描述
一般情况下,只要在方法内写return View();就不会报错了:
在这里插入图片描述
但是在查询语句时可以直接写另一个语句代替return View()
在这里插入图片描述
括号里面那个逗号有报错,不用在意,它报错是因为缺少参数,在代码没写完到那个点上时,没法给它参数。逗号后面的JsonRequestBehavior.AllowGet的作用是让客户端能够访问,没有这句的话,查询出来的数据看不到,还会报错。

下面具体说明查询的方法:
第一, 声明一个变量用来放查询出来的数据。这个变量会用等号把查询语句和自己连接起来。
在这里插入图片描述
第二, 实例化模型。,每个控制器创建后,前面的代码行中都会有一行绿色的代码注释:两条斜杠,然后是大写的get加冒号,后面接着的是控制器的名称或者是区域和控制器的名称。在其下写实例化的代码:Models.模型的名称 自定义模型名称 =关键字new Models.模型的名称();
在这里插入图片描述
第三, 每一张表都有字段,在这里,当查询一张表时,会临时给它定义一个范围变量。查询的时候用到关键字from,from的作用是指定范围变量和数据源。下面截图中的form后的tb是范围变量,in后面的是数据源。myModel.SYS_Academe是模型里的一张表。“from tb in myModel.sys_Academe select tb;”这整个代码的意思是从实例化模型myModel里面查询SYS_Academe这张表的所有内容。
在这里插入图片描述
第四, 查看数据。 写这一点代码直接访问数据就好,怎么直接访问呢?
把路径复制到视图页面的地址栏,点击确认,查询的数据就显示出来了:
路径的话,先在其中一个界面运行,然后把控制器名或者区域名加控制器名和方法名放在端口号后面(截图中13123就是端口号)。然后端口号后面没有数字直接加斜杠,有区域,把区域名放后面,没区域名,把控制器名放后面;接着,原先放区域名的就放控制器名加方法名,没放区域名的直接放方法名。

在这里插入图片描述
在视图上出来的结果是这样的:
在这里插入图片描述
第五, 创建类。
新建一个文件夹专门用来放类。
添加两个类,一个用来接收数据,一个用来返回数据。
返回数据的页面有这些字段:
在这里插入图片描述
接收数据的页面有这些字段:
在这里插入图片描述
第六, 实例化“类”。
实例化返回数据的类。
代码的格式是这样的:
类的名称+<所查询表的名称>+自定义名=new+类的名称+<表的名称>();
当写完代码后会报错。
在这里插入图片描述
这个时候 把鼠标放到报错的LayuiTableData上,它就会显示提示,提示上面最下面有显示可修补的程序,点击那行字就会弹出补救方案,最上面有一条using开头的指令,选它就好。选它以后,控制器的最上面一行会自动生成一句代码:
在这里插入图片描述
<SYS_Academe>也会报错,方法同LayuiTableData一样。
第七, 给count和data赋值。count和data是LayuiTableData内的两个字段,因为它们需要把值返回给视图,所以要给它们赋值,而LayuiTableData内的其它字段则不必。
赋值代码的格式是:实体化类名+英文状态下的点+字段=存放查询出来数据的变量名称;
具体代码如:
在这里插入图片描述
这句代码写完后,有个报错的地方,原因是查询数据那里的代码的问题,把原来的代码改正一下就好了:
在这里插入图片描述
第八, 自定义一个int类型的变量,调用Count返回序列中元素数量。
在这里插入图片描述
然后把其赋值给count:
在这里插入图片描述
第九, 把自定义类的名称放到返回对象的位置:
在这里插入图片描述
提示:这种查询方法没有分页。
02新增
新增是一个按钮。因此可以选择给它定义一个function。
但是下面用的是另外一个方法:
在用这方法前,要先引入一个jquery的js文件和一个bootstrap的js文件:
在这里插入图片描述
下面开始新增方法的讲解:
第一, 获取新增按钮的id名称。
在这里插入图片描述
在jquery中,获取id名称的格式是:
$+(“#+id名称”);
第二, 然后给按钮添加一个点击事件:
在这里插入图片描述
第三, 给一个点击方法:
在这里插入图片描述
第四, 弹出模态窗体。下面截图中注释前面的那句代码是用来弹出模态窗体的,代码的意思是通过获取模态窗体最外层标签的id来获取它,然后给它一个modal的方法。
在这里插入图片描述
第五, 清空数据。其实模态窗体有两个按钮,一个是 保存,一个是关闭。写完以后,点击关闭按钮,再打开时会看到原来的数据还在那,这时就要想办法清空。
先在模态窗体放重置类型的input的按钮,然后通过元素选择器选择这类按钮,给其点击事件。
在这里插入图片描述
第六, 定义一个function。
在保存按钮的标签上放一个鼠标单击事件:
在这里插入图片描述
第七, 获取存放数据的标签:
在这里插入图片描述
第九, 定义参数的类型和名称。有几个标签就定义几个参数,参数与参数之间用逗号隔开。
在这里插入图片描述
第十, 把页面的数据传送到控制器。
核心的代码是画了横线那一行,格式是;
$+英文状态下的句号+(“控制器的方法名”+逗号+{形参:实参}+逗号+function(接收参数的字段+{})
在这里插入图片描述
去控制器实例化要新增的那张表。
在这里插入图片描述
第十二,给表里面不能自增的字段赋值:
在这里插入图片描述
第十三,调用模型,给其方法。
在这里插入图片描述
第十四,再给模型一个保存的方法;
在这里插入图片描述

<think>好的,用户现在想要了解如何查询新增序列。之前我已经给他们介绍了根据业务类型生成自增序列号的实现方案,包括数据库设计、生成逻辑以及扩展优化等内容。现在用户的需求可能更偏向于具体的操作步骤,即如何在实际应用中执行查询新增序列的操作。 首先,我需要明确用户的问题。他们提到的“查询新增序列”可能指的是两个方面:一是如何查询现有的业务类型序列号的信息,比如查看当前计数器的值或格式;二是如何新增一个业务类型的序列号,也就是在系统中添加一个新的业务类型并为其配置序列生成规则。 接下来,我需要回顾之前提供的方案。之前的方案中,有一个数据库表`sequence_counter`,包含`biz_type`、`current_value``pattern`等字段。因此,查询操作应该涉及对这个表的SELECT操作,而新增序列则是INSERT操作。用户可能需要具体的SQL示例或者代码实现,以及相关的注意事项。 用户可能的身份是开发人员或者系统管理员,他们需要在实际系统中实现这些功能。因此,回答需要具体,提供代码示例步骤,同时考虑实际应用中可能遇到的问题,比如并发处理、事务管理等。 在思考如何回答时,应该分步骤进行,先讲查询,再讲新增,每个部分都给出SQL示例可能的代码逻辑。同时,需要提醒用户注意事务并发的问题,比如在高并发环境下如何保证数据一致性,使用数据库锁或者Redis的原子操作等。 此外,用户可能没有明说的深层需求是确保操作的原子性数据一致性。例如,新增序列时如何避免重复的业务类型,或者在查询时如何获取准确的最新计数器值。因此,在回答中需要涵盖这些潜在的问题,并给出解决方案,如使用唯一约束、事务处理、重试机制等。 最后,需要保持回答结构清晰,符合之前用户要求的格式,使用代码步骤说明,确保信息易于理解。同时,避免使用过多技术术语,保持语言简洁明了,适合不同层次的技术人员理解。</think>以下是针对 **序列号查询新增** 的具体操作方案,分为 **数据库原生实现** **代码封装实现** 两种方式: --- ### **一、查询序列号信息** #### 1. **直接查询数据库** ```sql -- 查询所有业务类型的序列配置 SELECT biz_type, current_value, pattern FROM sequence_counter; -- 查询特定业务类型(如订单)的当前值 SELECT current_value FROM sequence_counter WHERE biz_type = 'ORDER'; ``` #### 2. **通过API接口查询** ```java // Spring Boot 伪代码示例 @GetMapping("/sequence/{bizType}") public Response getSequenceInfo(@PathVariable String bizType) { SequenceCounter counter = sequenceDao.findByBizType(bizType); return Response.ok(counter); } ``` --- ### **二、新增业务类型序列** #### 1. **数据库直接操作** ```sql -- 插入新的业务类型(例如新增合同业务) INSERT INTO sequence_counter (biz_type, current_value, pattern) VALUES ('CONTRACT', 0, 'CONT-{date}-{seq:05d}'); -- 初始值设为0,格式自定义 ``` #### 2. **通过管理接口新增** ```java // 伪代码示例(需事务控制) @PostMapping("/sequence") @Transactional public Response createSequence(@RequestBody SequenceCreateRequest request) { // 检查业务类型是否已存在 if (sequenceDao.existsByBizType(request.getBizType())) { throw new BusinessException("业务类型已存在"); } // 插入新记录 SequenceCounter counter = new SequenceCounter(); counter.setBizType(request.getBizType()); counter.setCurrentValue(0); // 初始值 counter.setPattern(request.getPattern()); sequenceDao.save(counter); return Response.success(); } ``` --- ### **三、关键注意事项** #### 1. **并发控制** - 新增操作需添加唯一约束(防重复业务类型): ```sql ALTER TABLE sequence_counter ADD CONSTRAINT uniq_biz_type UNIQUE (biz_type); ``` #### 2. **初始化值设定** | 场景 | 初始值建议 | |------|------------| | 普通业务 | `0` (从1开始生成) | | 需要保留号码段 | `10000` (避免暴露真实数据量) | #### 3. **模式(pattern)验证** 需校验占位符完整性: ```python # 正则校验示例(确保包含{date}{seq}) if not re.match(r".*{date}.*{seq:0\d+d}.*", pattern): raise ValueError("无效的序列号格式") ``` --- ### **四、操作示例演示** #### 场景:新增「物流运单」业务 1. **执行SQL插入**: ```sql INSERT INTO sequence_counter VALUES ('LOGISTICS', 0, 'LOG-{date}-{seq:06d}'); ``` 2. **生成首个序列号**: ```java String no = generateSeq("LOGISTICS"); // 输出:LOG-20231002-000001 ``` 3. **查询验证**: ```sql SELECT current_value FROM sequence_counter WHERE biz_type = 'LOGISTICS'; -- 结果:current_value=1 ``` --- ### **五、故障排查指南** | 问题现象 | 可能原因 | 解决方案 | |----------|----------|----------| | 序列号重复 | 并发更新未加锁 | 使用`SELECT ... FOR UPDATE` | | 插入重复业务类型 | 唯一约束冲突 | 检查`biz_type`是否已存在 | | 序列号格式错误 | pattern缺少占位符 | 校验`{date}``{seq}` | > 建议:生产环境建议通过管理界面操作,避免直接修改数据库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值