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不同,加参数!
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
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语句换成存储过程名,CommandType不同,加参数!

浙公网安备 33010602011771号