导航

C#笔记之ASP.NET + 存储过程

Posted on 2005-01-20 12:10  Roson's Blog  阅读(305)  评论(0)    收藏  举报

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();