数据库设计札记 - 存储过程
2010-04-18 15:53
344 查看
1. 创建存储过程
存储过程基本上是一个SQL语句,但是它是事先经过语法分析后置于数据库上的。方便重复利用
首先,我们来仔细读下标准存储过程的写法
下面是个简单的例子:
2. 面向过程的调用存储过程
下面我们尝试在VS2008中使用C#语言来调用此存储过程
3. 面向对象的使用存储过程
通过上面的例子,我们可以很容易学会怎么调用存储过程,但是如果采用面向对象的设计方法,对存储过程的传参,调用,返回值等部分进行封装,将大大提高我们的编程效率。
网上封装好的函数很多,在此我们只关注设计的思路和理念
第一步 建立storeProcedure类的基本结构
接下来 我们就要往里面添加实际执行数据库操作的函数 ExecuteNonQuery()
最后是AssignParameterValue() ,我们要通过这个函数来为存储过程的参数赋值
OK,通过这样一整理,结构是不是更清晰了,以后再使用存储过程的时候就不需要关注怎么连数据库,怎么控制Command啦
如果大家继续努力,将ExecuteReader(),ExecuteScalar()都对象化
那么你就可以把它应用与你以后任何一个项目中啦!
来试试吧~
存储过程基本上是一个SQL语句,但是它是事先经过语法分析后置于数据库上的。方便重复利用
首先,我们来仔细读下标准存储过程的写法
create procedure[procedure_name] {@parameter data_type, @parameter data_type, ... } [with { recompile| encryption | recompile,encrytion } ] //可不写 [for replication] as sql_statements
下面是个简单的例子:
create procedure[update_time] { @time [datetime], @order [int] } as update book set book.time = @time where book.ID = @order
2. 面向过程的调用存储过程
下面我们尝试在VS2008中使用C#语言来调用此存储过程
try { SqlConnection conn = new SqlConnection(); conn.ConnectionString = ""; //连接到具体数据库 conn.Open(); //打开连接 SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.StoredProcedure; //关键! 指定该SQL语句是来自于存储过程 cmd.CommandText = "update_time"; //存储过程的名称 cmd.Parameters.Add(new SqlParameter("@time", SqlDbType.DateTime)); cmd.Parameters["@time"].Value = Convert.ToDateTime( ""); // 为输入参数赋值 cmd.Parameters.Add(new SqlParameter("@order", SqlDbType.Int)); cmd.Parameters["@order"].Value = 12345; cmd.EndExecuteNonQuery(); //因为是更新语句,故无返回值,直接执行即可 }
3. 面向对象的使用存储过程
通过上面的例子,我们可以很容易学会怎么调用存储过程,但是如果采用面向对象的设计方法,对存储过程的传参,调用,返回值等部分进行封装,将大大提高我们的编程效率。
网上封装好的函数很多,在此我们只关注设计的思路和理念
第一步 建立storeProcedure类的基本结构
public class StoreProcedure { //连接字符串 private string connectionString; //存储过程名 private string storeProcedureName; /// <summary> /// 属性,获取或更新连接字符串 /// </summary> public string ConnectionString { get { return this.connectionString; } set { this.connectionString = value; } } /// <summary> /// 属性,获取或更新存储过程 /// </summary> public string StoreProcedureName { get { return this.storeProcedureName; } set { this.storeProcedureName = value; } } /// <summary> /// 构造函数 /// </summary> /// <param name="conn">连接字符串</param> /// <param name="storeProcedureName">存储过程名</param> public StoreProcedure(string conn, string storeProcedureName) { this.connectionString = conn; this.storeProcedureName = storeProcedureName; } }
接下来 我们就要往里面添加实际执行数据库操作的函数 ExecuteNonQuery()
public int ExecuteNonQuery(params object[] paraValues) { //建立数据连接(注意该连接的生命周期即为using包含部分) using (SqlConnection conn = new SqlConnection(this.ConnectionString)) { try{ conn.Open(); SqlCommand command = new SqlCommand("MYSQL", conn); command.CommandType = CommandType.StoredProcedure; //接下来就该为存储过程的参数赋值了,我们先拟定一个函数 AssignParameterValue(),一会再来填充它 this.AssignParameterValues(command,paraValues); return command.ExecuteNonQuery(); } catch{ throw; } } }
最后是AssignParameterValue() ,我们要通过这个函数来为存储过程的参数赋值
private void AssignParameterValues(SqlCommand sqlCommand, params object[] paraValues) { try { for (int i = 0; i < paraValues.Length; i++) { //采用对象数组赋值,系统会自动进行类型转化 sqlCommand.Parameters[i + 1].Value = (paraValues[i] == null) ? DBNull.Value : paraValues[i]; } } }
OK,通过这样一整理,结构是不是更清晰了,以后再使用存储过程的时候就不需要关注怎么连数据库,怎么控制Command啦
如果大家继续努力,将ExecuteReader(),ExecuteScalar()都对象化
那么你就可以把它应用与你以后任何一个项目中啦!
来试试吧~
相关文章推荐
- 数据库的存储过程、数据库设计范式、数据库关系
- 第16天(就业班) 数据约束、数据库设计、关联查询、存储过程、权限和备份
- 数据库的存储过程、数据库设计范式、数据库关系
- 数据库课程设计心得【3】---存储过程的运用
- 设计案例3----利用存储过程和JOB 设计从餐饮ERP数据库将数据抽取、数据清洗到BI数据库
- 数据库的存储过程、数据库设计范式、数据库关系
- 数据库课程设计心得【3】---存储过程的运用
- 使用存储过程实现进销存系统中的先进先出算法(1)――数据库与存储过程设计
- 使用存储过程实现进销存系统中的先进先出算法(1)——数据库与存储过程设计
- 学生成绩数据库设计 五 执行存储过程
- 使用系统表根据存储过程名字生成ADO.NET数据库访问代码
- 获取数据库内某时间点后修改的存储过程
- java使用url和tns两种方式连接数据库执行存储过程
- C#连接数据库sqlserver2005,执行存储过程的实例
- sql2000数据库计算两个日期间的工作天数的存储过程
- 利用存储过程来提高数据库的更新问题
- 数据库设计过程
- SQLserver 数据库的索引,存储过程和触发器的使用与概念
- 数据库分页存储过程
- MSSQL数据库:存储过程学习