举个简单的例子:
T_MYTEST表中有两个字段 ID NVARCHAR(50),NAME NVARCHAR(50)
界面参数设置:
ArrayList ParaSet = new ArrayList();
ArrayList ParaValue = new ArrayList(); ArrayList ParaKeyName = new ArrayList(); ArrayList SelectRowList = new ArrayList();
GetSelectItemInf(ref SelectRowList); //获得grid选择的行
foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in SelectRowList) {
ParaKeyName.Add(\"NULL\");//用来记录操作的记录条数 //注意参数名称和值成对添加
ParaSet.Add(\"EDITTYPE\"); //操作类型 ParaValue.Add(\"ADD\");
ParaSet.Add(\"ID\");//ID ParaValue.Add(row.Cells[\"ID\"].Value.ToString()); ParaSet.Add(\"NAME\");//NAME
ParaValue.Add(row.Cells[\"ID\"].Value.ToString()); }
int ParamCount = ParaKeyName.Count; //操作次数 string ParamName = string.Empty; //参数名称 string ParamValue = string.Empty; //参数值 for (int a = 0; a < ParaSet.Count; a++) {
//参数之间用▲分隔
ParamName = ParamName + ParaSet[a].ToString().Replace(\"▲\", \"\") + \"▲\"; ParamValue = ParamValue + ParaValue[a].ToString().Replace(\"▲\", \"\") + \"▲\"; }
//设置参数(@ParamCount, @ParamName, @ParamValue ,@ExeOutInf),
//然后再调用存储过程(我这就不写了) //删除、修改也类型 可以是单条或批量
数据库存储过程如下:
ALTER PROCEDURE [dbo].[sp_name] @ForCount INT,
--总循环次数
@ParamName NVARCHAR(MAX), @ParamValue NVARCHAR(MAX),
--名称 --值
@ExeOutInf NVARCHAR(100) OUT AS BEGIN
SET NOCOUNT ON;
--返回值
DECLARE @EditType NVARCHAR(100); --记录操作类型 DECLARE @ForNum INT; SET @ForNum = 1; --定义表所有列参数
DECLARE @L_id NVARCHAR(50); DECLARE @L_FLOG INT; --求所有参数的总长度
DECLARE @TotalNameCount INT; DECLARE @PosFlog INT;
--记录总数
--记录字符串中'▲'的位置 --记录操作字符串 --设置初始值为0 --设置初始值为1
--设置初始值为传进来的参数
--编号 --名称
--纪录是否存在标志位
DECLARE @L_name NVARCHAR(50);
--记录循环次数 --设置初始值
DECLARE @VarName NVARCHAR(MAX); SET @TotalNameCount = 0; SET @PosFlog = 1;
SET @VarName = @ParamName; @ParamName
--循环获取参数总个数 WHILE(@PosFlog > 0)
BEGIN
SET @PosFlog = PATINDEX('%▲%' ,@VarName); IF(@PosFlog > 1) BEGIN
SET @TotalNameCount = @TotalNameCount + 1; SET @VarName = SUBSTRING(@VarName ,@PosFlog +
1,LEN(@VarName));
END; END;
DECLARE @RecordParamLength INT; --单条纪录的长度 SET @RecordParamLength = @TotalNameCount/@ForCount; DECLARE @VarRecordParamLength INT; --单条记录循环变量 DECLARE @ColumnName NVARCHAR(MAX); --列名 BEGIN TRAN OperateTran;
--开始事务 --循环
WHILE(@ForNum <= @ForCount) BEGIN
SET @VarRecordParamLength = 0; --初始化 SET @ForNum = @ForNum + 1; --循环取单条记录的所有参数
--下一次循环
WHILE(@VarRecordParamLength < @RecordParamLength) BEGIN
SET @VarRecordParamLength = @VarRecordParamLength + 1; SET @ColumnName =
--获取各个参数的对应的值
IF(@ColumnName = 'EDITTYPE') BEGIN
SET @EditType =
SUBSTRING(@ParamName,0,PATINDEX('%▲%',@ParamName));
SUBSTRING(@ParamValue ,1 ,PATINDEX('%▲%' ,@ParamValue) - 1)
END;
IF(@ColumnName = 'ID') BEGIN
SET @L_id =
SUBSTRING(@ParamValue ,1 ,PATINDEX('%▲%' ,@ParamValue) - 1);
END;
IF(@ColumnName = 'NAME') BEGIN
SET @L_name =
SUBSTRING(@ParamValue ,1 ,PATINDEX('%▲%' ,@ParamValue) - 1);
END;
SET @ParamName = SET @ParamValue =
SUBSTRING(@ParamName ,PATINDEX('%▲%' ,@ParamName) + 1,LEN(@ParamName)); SUBSTRING(@ParamValue ,PATINDEX('%▲%' ,@ParamValue) + 1,LEN(@ParamValue));
END;
--添加
IF(@EditType = 'ADD') BEGIN
SET @L_FLOG = (SELECT COUNT(*)
FROM T_MYTEST WHERE ID = @L_ID);
IF(@L_FLOG = '1')
BEGIN
SET @ExeOutInf = '对不起,该记录信息已经存在.'; END; BEGIN
INSERT INTO T_MYTEST
(id,name) (@L_id,@L_name); VALUES
SET @ExeOutInf = 'NEWID:' + 'ID;' + @L_ID;
ELSE
END;
END;
--修改
IF(@EditType = 'EDIT') BEGIN
SET @L_FLOG = (SELECT COUNT(*)
FROM T_MYTEST WHERE ID = @L_ID);
IF(@L_FLOG = '0')
BEGIN
SET @ExeOutInf = '对不起,该记录信息不存在,不能进行修改.'; END; BEGIN
UPDATE T_MYTEST
SET id = @L_id,name = @L_name WHERE id = @L_id;
ELSE
END;
END;
--删除
IF(@EditType = 'DEL') BEGIN
SET @L_FLOG = (SELECT COUNT(*)
FROM T_MYTEST WHERE ID = @L_ID);
IF(@L_FLOG = '0')
BEGIN
SET @ExeOutInf = '对不起,该记录信息不存在,不能进行删除.'; END; BEGIN
DELETE T_MYTEST WHERE id = @L_id;
ELSE
END;
END;
END;
IF(@@Error > 0) --如果事务有错误,返回,表示为不成功 BEGIN
ROLLBACK TRAN OperateTran; return '0';
END
ELSE --否则执行事务,返回,表示成功 BEGIN
COMMIT TRAN;
END
return '1';
END
总结:用这种方法编写存储过程的一点好处:
1、增加、删除、修改方法放在同一个存储过程中; 2、可以进行单个或批量数据增加、删除、修改操作;
3、客户端调用存储过程方法统一,都是@ParamCount, @ParamName,
@ParamValue ,@ExeOutInf四个参数, 可以把它分离出一个方法。
注:以上纯属个人意见。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务