ADO.NET调用存储过程

存储过程
CREATE PROCEDURE Pr_AddUser
(
    
@UserName varchar(32),
    
@Password varchar(100),
    
@Email varchar(100)
)
AS
    
Declare @RecordCount as int

SET  @RecordCount =
(
   
SELECT
       
count(*)
   
FROM
       Users
   
WHERE
       UserName 
= @UserName
 )

IF  @RecordCount < 1

   
BEGIN   
        
INSERT INTO
           Users
          (
              UserName,
              Password,
              Email
           )
           
VALUES
          (
              
@UserName,
              
@Password,
              
@Email
           )
        
RETURN @@Identity
   
END

GO
ADO.NET数据访问
public int AddUser(String sUserName,String sPassword,String sEmail)
        
{
            
//定义数据库的Connection and Command 
            SqlConnection myConnection = new SqlConnection(DBConnectionString.ConnectionString);
            SqlCommand myCommand 
= new SqlCommand("Pr_AddUser",myConnection);

            
//定义访问数据库的方式为存储过程
            myCommand.CommandType = CommandType.StoredProcedure;

            
//创建访问数据库的参数
            SqlParameter parameterUserName = new SqlParameter("@UserName",SqlDbType.VarChar,32);
            parameterUserName.Value 
= sUserName;
            myCommand.Parameters.Add(parameterUserName);

            SqlParameter parameterPassword 
= new SqlParameter("@Password",SqlDbType.VarChar,100);
            parameterPassword.Value 
= sPassword;
            myCommand.Parameters.Add(parameterPassword);

            SqlParameter parameterEmail 
= new SqlParameter("@Email",SqlDbType.VarChar,100);
            parameterEmail.Value 
= sEmail;
            myCommand.Parameters.Add(parameterEmail);

            SqlParameter parameterUserID 
= new SqlParameter("@UserID",SqlDbType.Int,4);
            parameterUserID.Direction 
= ParameterDirection.ReturnValue;
            myCommand.Parameters.Add(parameterUserID);

            
try
            
{
                
//打开数据库的连接
                myConnection.Open();
            }

            
catch(Exception ex)
            
{
                
throw new MyException("10001","数据库连接失败!",ex);
            }


            
try 
            
{
                
//执行数据库的存储过程(访问数据库)
                myCommand.ExecuteNonQuery();
            }

            
catch(Exception ex)
            
{
                
throw new MyException("10001",ex.Message,ex);
            }

            
finally 
            
{
                
if (myConnection.State == ConnectionState.Open)
                
{
                    
//关闭数据库的连接
                    myConnection.Close();
                }

            }


            
return (int)parameterUserID.Value;
        }
参数名及顺序与存储过程的写法一致!数据访问代码同执行SQL语句一样,可返回read,dataset等,
不同:sql语句换成存储过程名,CommandType不同,加参数!
posted @ 2007-04-11 21:16  chy710  阅读(103)  评论(0)    收藏  举报