ASP.NET + 存储过程
1.编写存储过程
~~~~~~~~~~~~~~~~
使用存储过程可以减少在应用程序中执行繁重的数据库操作的开销。
1).以下代码示例创建一个只返回表的存储过程(GetAuthors):
CREATE Procedure GetAllUsers AS
SELECT * FROM Users
return
GO
2).可以创建同样接受参数的存储过程。例如:
CREATE Procedure ChkLogin (@UserName varchar(50)) AS
select * from Users where UserId=@UserName
return
GO
CREATE PROCEDURE Register (@UserName varchar(50))
AS
insert into Users(UserID) values (@UserName)
GO
//在SQL查询器测试:
EXECUTE ChkLogin lx,123456
GO
3).下面是一个更复杂的存储过程:
======================================
CREATE PROCEDURE TopicsGetItem
(
@AdminCode char(3),
@ID int,
-- output参数用于返回选定记录的值
@Title varchar(30) output,
@Description varchar(500) output
)
AS
SET NOCOUNT ON -- 不返回受影响行的值
-- 确保是一个 Admin 用户
IF @AdminCode<>'adm'
BEGIN
RETURN 100 -- 无效 admin 错误
END
-- 检查记录是否存在
IF (SELECT Count(ID) FROM Topics WHERE ID=@ID)=0
BEGIN
RETURN 101 -- 无效 ID 代码
END
-- 继续执行并返回该记录
SELECT @Title=Title,@Description=Description from Topics where ID=@ID
-- 返回错误,如果成功则返回 0
RETURN @@ERROR
======================================
CREATE PROCEDURE sp_AccountRole_Create
(
@CategoryID int,
@RoleName nvarchar(10),
@Description nvarchar(50),
@RoleID int output
)
AS
DECLARE @Count int
-- 查找是否有相同名称的记录
SELECT @Count = Count(RoleID) FROM Account_Role WHERE RoleName = @RoleName
IF @Count = 0
INSERT INTO Account_Role(CategoryID, RoleName, Description) values(@CategoryID, @RoleName, @Description)
SET @RoleID = @@IDENTITY
RETURN 1
GO
======================================
2.ASP.NET调用存储过程
~~~~~~~~~~~~~~~~~~~~~~
SqlConnection conn = new SqlConnection("server=(local);database=pubs;UID=sa;PWD=sa");
<=SqlDataAdapter da = new SqlDataAdapter("此处sql语句替换成存储过程名称", conn);
=<
<==SqlCommand cm = new SqlCommand("Register", myConnection); //写操作
da.SelectCommand.CommandType = CommandType.StoredProcedure; //指定命令类型是存储过程
//**带参数调用:
da.SelectCommand.Parameters.Add(new SqlParameter("@UserName", SqlDbType.NVarChar, 50)); //指定参数名称、类型、长度
da.SelectCommand.Parameters["@UserName"].Value = UserName.Text.Trim(); //指定参数值
//**************
<=DataSet ds = new DataSet();
<=da.Fill(ds);
=<
<=conn.Open();
<=conn.ExecuteNonQuery();
<=conn.Close();
浙公网安备 33010602011771号