存储过程实现组合查询
来源:互联网 发布:java并发编程实践源码 编辑:程序博客网 时间:2024/05/22 05:26
这几天重构机房收费系统比以前上手多了,解决每一个bug都很有成就感。在做组合查询时,我在网上找了一些资料,发现有用字符串拼接的,但是总感觉字符串的判断条件放在D层不太好,不如将这些复杂的东西都交给数据库解决,我在数据库中创建了一个带参数的存储过程.下面就是我实现这个功能的总结.
1界面如下:通过界面可以看到要传递的参数有11个.所以创建的Entity也有11个属性.
Entity创建代码:
Public Class QueryEntity Private field0 As String Private field1 As String Private field2 As String Private operate0 As String Private operate1 As String Private operate2 As String Private content0 As String Private content1 As String Private content2 As String Private relation0 As String Private relation1 As String Public Property _field0 As String '字段0 Get Return field0 End Get Set(value As String) field0 = value End Set End Property Public Property _field1 As String '字段1 Get Return field1 End Get Set(value As String) field1 = value End Set End Property Public Property _field2 As String '字段2 Get Return field2 End Get Set(value As String) field2 = value End Set End Property Public Property _operate0 As String '操作符0 Get Return operate0 End Get Set(value As String) operate0 = value End Set End Property Public Property _operate1 As String '操作符1 Get Return operate1 End Get Set(value As String) operate1 = value End Set End Property Public Property _operate2 As String '操作符2 Get Return operate2 End Get Set(value As String) operate2 = value End Set End Property Public Property _content0 As String '查询内容0 Get Return content0 End Get Set(value As String) content0 = value End Set End Property Public Property _content1 As String '查询内容1 Get Return content1 End Get Set(value As String) content1 = value End Set End Property Public Property _content2 As String '查询内容2 Get Return content2 End Get Set(value As String) content2 = value End Set End Property Public Property _relation0 As String '关系0 Get Return relation0 End Get Set(value As String) relation0 = value End Set End Property Public Property _relation1 As String '关系1 Get Return relation1 End Get Set(value As String) relation1 = value End Set End PropertyEnd Class
2在U层中主要实现的功能就是给Entity赋值,和将返回的值显示在datagridview中。
3在B层中的逻辑简单,就是传递参数调用D层的函数,返回datatable给U层.
4在D层中将参数传给数据库执行存储过程.并将返回的datatable给B层。D层的代码为:
Public Overloads Function SelectCard(ByVal enQuery As Entity.QueryEntity) As DataTable Using conn As New SqlConnection(DBUtil.strConnection) Dim cmd As SqlCommand cmd = New SqlCommand("QueryStuInfo", conn) cmd.CommandType = CommandType.StoredProcedure '执行的是存储过程 cmd.Parameters.Add(New SqlParameter("@field0", enQuery._field0)) '添加的一系列参数 cmd.Parameters.Add(New SqlParameter("@operate0", enQuery._operate0)) cmd.Parameters.Add(New SqlParameter("@content0", enQuery._content0)) cmd.Parameters.Add(New SqlParameter("@relation0", enQuery._relation0)) cmd.Parameters.Add(New SqlParameter("@field1", enQuery._field1)) cmd.Parameters.Add(New SqlParameter("@operate1", enQuery._operate1)) cmd.Parameters.Add(New SqlParameter("@content1", enQuery._content1)) cmd.Parameters.Add(New SqlParameter("@relation1", enQuery._relation1)) cmd.Parameters.Add(New SqlParameter("@field2", enQuery._field2)) cmd.Parameters.Add(New SqlParameter("@operate2", enQuery._operate2)) cmd.Parameters.Add(New SqlParameter("@content2", enQuery._content2)) Dim adp As New SqlDataAdapter(cmd) Dim dt As New DataTable Try conn.Open() adp.Fill(dt) ’填充数据表 Catch ex As Exception Throw ex End Try Return dt End Using End Function
5在SQL Sever中创建的存储过程的T-SQL语句为:
create procedure QueryStuInfo (@field0 char(10), @operate0 char(10), @content0 char(20), @relation0 char(10), @field1 char(10)=default, @operate1 char(10)=default, @content1 char(20)=default, @relation1 char(10), @field2 char(10)=default, @operate2 char(10)=default, @content2 char(20)=default ) as begin declare @SQL varchar(2000) '实现拼接字符串 select @SQL = 'select * from V_StuCards where ' + @field0 +@operate0 +@content0 if @relation0 != '' select @SQL =@SQL + @relation0 + @field1 +@operate1 + @content1 if @relation1 != '' select @SQL =@SQL + @relation1 + @field2 +@operate2 +@content2 exec(@SQL) end6.总结:虽然说存储过程有它的缺点,比如移植性差等,但是我不能投鼠忌器。基本的内容还是要踏实地掌握。
- 存储过程实现组合查询
- 组合查询存储过程的实现
- 组合查询和存储过程
- 带有存储过程的组合查询
- 利用存储过程进行组合查询
- 重构(组合查询)-存储过程
- 机房收费系统之组合查询:基本字符串拼接方法和存储过程实现
- VB.NET版机房重构----模板方法+存储过程实现组合查询
- 【机房重构】—模板方法+存储过程简单实现组合查询
- 存储过程实现分页查询
- 【机房重构】组合查询—存储过程
- DataBase.存储过程:实现动态的存储过程查询
- sql server 存储过程 实现模糊查询
- 存储过程中如何实现子查询
- 存储过程实现模糊查询分页
- 模糊匹配查询用存储过程实现
- 存储过程实现SQL2005查询Access数据库
- 存储过程实现SQL2005查询Access数据库
- hdu——1201——18岁生日
- Ubuntu 12.04 LTS下一些小问题的设置方法
- 学习opencv----.../opencv/cxcore/inclue/cxtype.h
- 程序员求职之道(《程序员面试笔试宝典》)之走进微软
- WebRTC音视频引擎研究(2)--VoiceEngine音频编解码器数据结构以及参数设置
- 存储过程实现组合查询
- 网络扫描技术揭秘读书笔记3-TCP/UDP端口扫描器设计原理
- mingw的安装
- opencv学习_8 ( 图像细化)
- 海量数据库设计思想
- kamailio/openser/opensips 生成RPM包/RPM打包
- 线性感知机和SVM(初探)
- 解决mysql“Access denied for user 'root'@'localhost'”
- 角色权限管理系统(登录模块)