学习心得:参数查询和存储过程

上传人:lis****210 文档编号:187197973 上传时间:2023-02-12 格式:DOCX 页数:4 大小:13.53KB
收藏 版权申诉 举报 下载
学习心得:参数查询和存储过程_第1页
第1页 / 共4页
学习心得:参数查询和存储过程_第2页
第2页 / 共4页
学习心得:参数查询和存储过程_第3页
第3页 / 共4页
资源描述:

《学习心得:参数查询和存储过程》由会员分享,可在线阅读,更多相关《学习心得:参数查询和存储过程(4页珍藏版)》请在装配图网上搜索。

1、数据库程序设计学习之谈谈我对参数查询与存储过程调用的认识一、参数查询(1)对参数查询的产生背景和概念的理解1. 背景在学习一篇崭新的知识之前。我通常是先弄清楚该知识产生的背景,即我 们为什么要使用该知识。通过查找资料,我了解到,现在,大多数程序都会或多或少的使用到SQL 语句和数据库打交道,而许多时候,我们写程序时,程序中的语句中某些变量的 值只能在程序运行的时候才能确定,这意味着SQL语句只能在程序运行中动态的 生成。对于这一点,一些程序员采用格式化字符串等方式来生成SQL语句,例如 语句 “select column1,column2 from tablel where param_col

2、umn1 =value1 and param_column2= value2”,其中value1和value2的之只能在程序运行的时 候才知道,这时候程序员就会使用select column1,column2 from table1 where param_column1 =%d and param_column2= s” 语句,在实际的值代替%后将 SQL语句发送给数据库引擎。但是如果查询条件稍有变化,SQL语句就会不同, 而查询引擎就会重新解析SQL语句,造成执行效率很低。另外,随着数据库的应用越来越广泛,安全问题也就产生了,像SQL注入 攻击情况就越来越多。SQL注入攻击是黑客对数据库进

3、行攻击的常用手段之一。 用户可以提交一段经过巧妙设计的数据库SQL语句,根据程序返回的结果,获得 某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。而使用参数 查询可以有效解决或防止这些问题的产生。2. 概念的理解简单的来说,参数化查询是指在设计与数据库链接并访问数据时,在需要 填入数值或数据的地方,使用参数来给值。在SQL语句中,这些参数通常一占位 符来表示。而不同的的数据提供程序中使用的占位符是不同的,在SQL sever 中使用命令参数(前面冠以符号)来指定。在参数查询中,程序直接把这个包 含待定值的SQL语句交给数据库,由数据库引擎为之生成查询计划。之后,程序

4、以参数的方式提供这些值。数据库引擎把参数中的值应用到查询计划中去,然后 执行查询结果。(2)对参数查询的基础知识的认识1. 参数的类型与程序设计语言中的函数或过程类似,参数查询中的参数分为输入参数、输 出参数和输入输出参数。上面我举的例子就是输入参数。参数的类型可以是整型、 浮点数、字符串甚至是二进制数2. C#中的参数查询现在,参数查询得到了各种主要的编程语言和开发工具的支持,像ADO, ADO.NET,ODBC等数据访问模式都支持参数查询方式。而C#通过ADO.NET支持对 数据库的操作。在C#中,参数化查询的一般过程是先建立到数据的连接登陆到数据库中,然 后用sqlCommand创建命令

5、对象,为其指定SQL语句或存储过程。然后通过 sqlCommand的Parameters属性创建并添加SQL语句中所包含的参数到参数及集 合中去,在这过程中可以设置参数类型或返回参数特性等。然后给参数赋值后在 执行命令对象。3. 支持的查询类型选择查询、插入结果、插入值,更新等都能用到参数查询。(2)参数查询的好处任何东西都是对人们有用处人们才去使用它。参数查是如此。它对我们的 程序设计有很大的意义。1. 在开头,我就已经提到了,参数查询可以有效防止SQL注入;2. 可以提高查询性能,像当我们需要创建可以使用多次,只是每次所使用的值不 同时,就可以用参数查询。因为改变参数的值后,SQL语句不需

6、要再重新提交, 查询计划也不需要重新生成。这样效率就提高了。3. 参数化查询参数类型为可变长度时(varchar,nvarchar,char等)需要指定参 数类型及长度,若为值类型(int,decimal,datetime等)则仅指定参数类型即可4. 传值为varchar(max)或者nvarchar(max)时,参数长度指定为T即可等,这 些都极大的方便了程序设计员。二、存储过程调用说实话,“存储过程”这个名词对我来说是非常陌生的。因为在学习数 据库系统概论这门课程时,我只听过老师提到这个名词几次,而自己也没有真 正的去自学这部分知识。所以,一开始我根本就不知道什么叫做“存储过程”, 更别提

7、在C#当中使用它了。所以在学习这部分内容前,我又把数据库系统概 论这本书拿出来,先学习有关存储过程的相关知识。通过学习,我了解到存储过程是SQL语句和可选控制流语句的预编译集合, 以一个名称存储作为一个单元处理。存储过程存储在数据库内,可通过来自应用 程序的调用来执行,并且允许用户声明的变量、条件执行以及其他强大的编程功 能。那么我在想:为什要使用存储过程呢?因为在编写程序时,使用存储过程 会带来极大的好处。比如说,存储过程可以简化维护,因为修改存储过程通常比 修改所部署的组件中的硬编码SQL语句要容易。并且存储过程和组件一样能够作 到一次编写多次调用,修改与程序的其它部分独立。还有存储过程会

8、降低网络流 量。只需向服务器传递一条调用语句即可完成多条SQL语句对服务器的请求等 等。这些优点诱惑着程序员使用存储过程。在C#中,我们通过ADO.NET进行对数据库的访问,因为其对数据库的访问 模式有两种即直接对数据库操作和数据集模式,相应地,我分别从这两方面学习 存储过程的调用,另外ADO.NET包括两个数据提供程序即SQL Server.NET数据 供应器和OLE DB.NET数据供应器,我只从SQL sever的角度去分析存储过程的 调用问题。(1)直接对数据库操作在这种模式中,当程序使用存储过程调用的时候,首先要使用包含对存储 过程的引用的数据命令对象(SqlCommand)。然后可

9、以打开一个连接,执行命令 以执行操作,接着关闭连接。其中,SqlCommand使用三种方法调用存储过程。 如果该命令返回结果集(即该命令执行Select语句),则要使用ExecuteReader 方法,并且数据读取器(DataReader)获取数据,数据读取器的功能类似于高效 的只读游标。若不需要返回结果集可使用ExecuteScalar方法或 ExecuteNonQuery 方法。(2)数据集模式使用这种模式,我们要先创建该数据集的实例,再使用数据适配器从数据 源填充它,然后可以使用数据集中的数据。其中我们使用DataSet对象调用 存储过程,在获得返回值和返回参数之外,还可以收集并使用返回

10、的数据行。而在这种模式中,对存储过程的调用又分为简单的存储过程的调用和带参 数的存储过程的调用。在简单的存储过程的调用当中,一种做法可以是:我们只需要交创建好的 存储过程的名字作为SqlCommand构造函数的参数,然后设置Command对象的 CommandType等属性,最后就是使用数据集进行调用了。而事实上,多数存储过程都需要接受参数、输出参数,返回单个或多个结果 集以及返回值。而参数又分为四种类型,即Input(只用于将信息从应用程序 传输到存储过程)、Output(此参数只用于将信息从存储过程传输回应用程 序)、InputOutput(双向)、Return Value(表示存储过程的

11、返回值,与存储 过程的RETURN语句中的值有关。在这种调用方式中,我们可以将CommandType设置为Storedprocedure, 然后通过调用SqlCommand的Parameters集合的Add方法来创建参数,并设 置参数的属性,包括存储过程的参数名称、类型、大小等。剩下的工作就和 简单的存储过程的调用相同了。而这些就是我所学到的存储过程了。三、总结参数过程和存储过程调用是C#当中非常重要的两个知识点,在程序中 也经常能遇到,因为它们给程序的编写和执行带来了极大的便利。所以, 我认为认真地学习这两点,掌握有关它们的基础知识,对我未来进行程序 编写任务食欲极大的好处的。而在这次学习中,我也查看了许多资料,复习了以前的课本,弄懂了这两 点到底是怎么回事,当然也遇到了问题,像在学习存储过程的时候,一开 始,我真的是一点都读不懂,可是后来通过反复阅读,练习,最后终于弄 明白了其中的道理。总之,收获很大,很开心。当然了,我知道我自己还 需多加耐心和实践。参考资料:1. 教材C#程序设计与案例教程杨树林著清华大学出版社2. 数据库系统概论(第四版)王珊萨师煊著高等教育出版社3. C#3.0实例精通王院峰陈静等编著机械工业出版社4. C#开发实战宝典王小科等编著清华大学出版社

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!