结合存储过程开发数据库应用程

news/2024/7/6 0:16:31

存储过程提供了数据驱动应用程序中的许多优点。利用存储过程,数据库操作可以封装在单个命令中,为获取最佳性能而进行优化并通过附加的安全性得到增强;利用存储过程,还可以获得sql语句的重用,节省开发时间。在.NET中,我们可以结合SQL Server提供的存储过程功能开发安全的数据库程序。

和一般的数据库应用程序开发流程一样,采用存储过程的应用程序开发过程也分为如下几个过程:设计数据库、设计存储过程、连接数据库、编写命令、执行命令、关闭数据库连接。下面我以一个简单的用户注册程序一一加以介绍。

设计数据库

       为简单起见,用户数据库采用的字段只有四个:用户标识Uid、用户名wuser、用户密码pwd、电子邮件地址Email。打开SQL Server的企业管理器,新建数据库grid_web,然后新建表webuser,如下图设计该数据库表。

      

设计存储过程

       设计好数据库以后,就可以开始设计存储过程了。存储过程可以分为两种:有参数和没有参数的存储过程。由于在编程使用存储过程时,这两种存储过程使用方法不太一样,因而在这里我们设计两种存储过程。

       这里需要设计的存储过程为向数据库中插入新的行,在实际使用中可以用存储过程来实现插入、查询、修改、删除、统计等常见的数据库处理。没有参数的存储过程采用默认值作为数据库表的值,其实现如下:

CREATE PROCEDURE dt_insertuser1

 AS

INSERT INTO webuser VALUES(“lotusswan","123456","lotusswan@mycom.com")

GO

有参数的存储过程采用变量作为数据库表的值,和上面的实现大同小异,只是将默认值该为了变量参数:

CREATE PROCEDURE dt_insertuser

@user char(12),

@pwd char(12),

@email char(30)

 AS

INSERT INTO webuser VALUES(@user,@pwd,@email)

GO

连接数据库

       设计好数据库和存储过程之后,我们可以开始设计应用程序了。首先要做的是连接数据库,可以通过SqlConnection对象、OleDbConnection 对象、OdbcConnection 对象等方法连接数据库,由于我们采用的是SQL Server数据库,考虑到效率因素,我们采用SqlConnection对象。

       连接数据库最主要的一步是用好SqlConnectionConnectionString属性,这里我们采用的连接语句为:

string ConnStr;

       ConnStr="Data Source=jiang;Integrated Security=SSPI;Initial Catalog=grid_web";

       SqlConnection conn =new SqlConnection(ConnStr);

       上面的代码中采用的安全模式是SSPI,也可以采用用户名/密码的方式连接数据库,但是后一种方式用户名和密码放在程序中,显然是不太安全的。采用SSPI时,使用的用户名时ASPNET,因此必须当ASPNET具有访问数据和执行存储过程的权限时,该连接方法才是正确的,否则会出现错误。

编写和执行命令

       通过SqlCommand对象可以为编辑命令,为采用存储过程,SqlCommand对象的几个属性需要设置好。CommandText获取或设置要对数据源执行的 Transact-SQL 语句或存储过程,这里设置为dt_insertuser或是dt_insertuser1分别对应于有参数和无参数的存储过程;CommandType设置为System.Data.CommandType.StoredProcedure,采用存储过程解释CommandText属性的值;有参数和无参数的存储过程的执行区别在于Parameters属性,具体可参见下面的代码。设置好SqlCommand对象的属性后,就可以调用ExecuteNoQuery函数执行命令了。

       无参数的存储过程实现十分简单:

       SqlCommand comm =new SqlCommand();

       comm.CommandText="dt_insertuser1";

       comm.Connection=conn;

       comm.CommandType=System.Data.CommandType.StoredProcedure;

       comm.ExecuteNonQuery();

       有参数的存储过程的执行要复杂得多:

       //comm添加参数,参数名称和个数由储存过程决定;                          

       comm.Parameters.Add("@user",System.Data.SqlDbType.VarChar,12,"wuser");

       comm.Parameters.Add("@pwd",SqlDbType.VarChar,12,"pwd");

       comm.Parameters.Add("@email",SqlDbType.VarChar,30,"Email");

       //comm的参数赋值,作为参数值传递给存储过程;

       comm.Parameters["@user"].Value=usertxt.Text;

       comm.Parameters["@pwd"].Value=pwdtxt.Text;

       comm.Parameters["@email"].Value=emailtxt.Text;

       comm.ExecuteNonQuery();

       执行完SqlCommand对象的ExecuteNonQuery函数后,数据库中就会新添加了一行数据。

关闭数据库连接

       和其他类别的连接一样,关闭数据库连接是最简单的:

       conn.Close();

      


http://www.niftyadmin.cn/n/1958822.html

相关文章

python-操作postgresql

PostgreSQL 至少有至少 3 个 Python 接口程序可以访问 PosgreSQL: psycopg, PyPgSQL 和 PyGreSQL. 第四个, PoPy, 现在已经被废弃(2003年, 它贡献出自己的代码, 与PygreSQL整合在一起). 这三个接口程序各有长处, 各有缺点, 根据实践结果选择使用哪个接口是个好主意. 多亏他们…

C++数据库操作并生成ini文件。

我最近在学习C,刚学了半个月吧,带我的导师就开始让我写一个利用c来开发个工具,这可难坏我了,起初以为根本弄不出来。但是经过不停的修改,导师的带领最终还是弄出来了。明白做技术的在不懈的努力下,肯定会把结果弄出来的…

将世界坐标转成NGUI坐标

http://blog.csdn.net/anyuanlzh/article/details/40072051 将世界坐标转成NGUI坐标&#xff0c;这个中间需要一个屏幕坐标&#xff0c;可参考如下代码&#xff1a; [html] view plaincopy/// <summary> /// 将世界坐标转成UI坐标 /// </summary> /// <pa…

django-构造第一个blog

1、安装好postgresql和psycopg2 2、django-admin.py startproject blog 3、manage.py startapp myblog 4、打开models.py 并编辑 #!/usr/bin/env python from django.db import modelsclass BlogPost(models.Model):titlemodels.CharField(max_length150)bodymodels.TextFi…

Dreamweaver MX认证考试(样题)

Dreamweaver MX认证考试(样题) http://www.gz35.com/new1/list.asp?boardid3  Macromedia Dreamweaver MX认证考试(样题) 作者&#xff1a; 1. 下面关于New Style&#xff08;新样式&#xff09;对话框的说法错误的是&#xff1a;□ A. 可以选择Make Custom Style&#xff08…

2011.7.11-7.15 周总结

在这一周中&#xff0c;已经实现了从串口读出数据的过程&#xff0c;包括NMEA-0183格式的数据及二进制格式的数据。 同时对从模拟器读出的数据进行了分析&#xff0c;对照数据说明分析具体消息的内容是否相符&#xff0c;其中发现有1至2项不相符的情况&#xff0c;不知是模拟器…

2023年05月份青少年软件编程Python等级考试试卷三级真题(含答案)

2023-05 Python三级真题 题数&#xff1a;38 分数&#xff1a;100 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 请选择&#xff0c;下面代码运行之后的结果是&#xff1f;&#xff08; &#xff09;&#xff08;2分&#xff09; a 2 b 4 try:…

Unity手游之路十二手游资源热更新策略探讨

http://blog.csdn.net/janeky/article/details/17666409 上一次我们学习了如何将资源进行打包。这次就可以用上场了&#xff0c;我们来探讨一下手游资源的增量更新策略。注意哦&#xff0c;只是资源哦。关于代码的更新&#xff0c;我们稍后再来研究。理论上这个方案可以使用各种…