数据访问层现在都兴用存储过程了本篇记录了一个功能比较齐全的存储过程的写法,和一个C#实现的比较通用的调用带返回值存储过程的方法。1、存储过程:例子中操作的表为 power(p_id,p_name,p_des)本存储过程中进行了一般的空值,主键重复检测,对多条操作语句使用了事务CREATE PROCEDURE myp2 @pid int ,@pname nvarchar(15),@pdes nvarchar(50)ASdeclare @return int,@count int--检测参数是否有空值if(ltrim(rtrim(@pname))='' or ltrim(rtrim(@pid))='')begin select 1--输入的参数有空值 return end--检测是否有主键重复select @count=count(1) from power where p_id=@pidif(@count>0)begin select 2--有重复 return end--执行事务begin tran insert into power(p_id,p_name,p_des)values(@pid,@pname,@pdes)if(@@error<>0) goto l_rollback insert into powerLog(p_id,p_des)values(@pid,@pdes)if(@@error<>0) goto l_rollbackcommit transelect @return=4 --成功goto l_okl_rollback: rollback tran select @return=3 --失败l_ok:select @returnGO2、C#中调用带返回值的存储过程这是一个比较通用的方法,存储过程的参数可以放在数组里面 /*执行存储过程 * 参数说明: * StoreProName:存储过程名称 * parameters:存储过程的参数,用OleDbParameter类型的数组表示 * result:执行该存储过程的返回值,返回“成功”则执行成功,返回其他则失败 */ public void ExcuteStore(string StoreProName,OleDbParameter[] parameters,out string result) { OleDbCommand com1 = new OleDbCommand(StoreProName, GetDBcon()); if (com1.Connection.State == ConnectionState.Closed) com1.Connection.Open(); com1.CommandType = CommandType.StoredProcedure; //给com添加参数,并赋值 for (int i = 0; i < parameters.Length; i++) { com1.Parameters.Add(parameters[i]); } string temp = ""; try { object obj = com1.ExecuteScalar(); if (obj != null) temp = obj.ToString(); } catch (Exception ee) { result = "操作失败!" + ee.Message.ToString(); return; } finally { com1.Connection.Close(); } result = "成功"; //默认成功 //返回0表示数据操作成功 //返回1表示提交的数据有空值 //返回2表示编号有重复 //返回3表示数据操作错误 switch (temp) { case "0": result = "成功"; //同时写日志 //DB.WirteLog(DB.opNO, DateTime.Now.ToString("yyyyMMddHHmmss"), thisModNO); break; case "1": result = "提交的数据有空值!"; break; case "2": result = "编号有重复!"; break; case "3": result = "数据操作错误!"; break; } } 上面方法的使用范例: OleDbParameter[] param=new OleDbParameter[2]; param[0] = new OleDbParameter("@name", OleDbType.VarChar, 6); param[1] = new OleDbParameter("@pwd", OleDbType.VarChar, 40); param[0].Value = TextBox1.Text; param[1].Value = TextBox2.Text; string outstring; ExcuteStore("myprocedure", param, out outstring); if (outstring == "成功") binding(); else Label1.Text = outstring;我用的是OleDb驱动,连的一种古老的数据库syBase,可能大家对SqlParameter更熟悉一点,方法一样。
转载于:https://www.cnblogs.com/tuyile006/archive/2007/04/12/710901.html
相关资源:数据结构—成绩单生成器