如何从存储过程中读取参数设置?
如何从存储过程中读取参数设置?
先写一个简单的存储过程,实现添加一个用户的功能:
--添加新用户
CREATEPROCEDUREdbo.usp_User_Insert
@usernamevarchar(16),--用户名
@pwdvarchar(16),--密码
@emailvarchar(50),--Email
AS
--添加到用户表
INSERTINTOT_User
([username],[pwd],[email],
VALUES
(@username,@pwd,@email)
GO
CREATEPROCEDUREdbo.usp_User_Insert
@usernamevarchar(16),--用户名
@pwdvarchar(16),--密码
@emailvarchar(50),--Email
AS
--添加到用户表
INSERTINTOT_User
([username],[pwd],[email],
VALUES
(@username,@pwd,@email)
GO
如果手动为为存储过程准备参数,是像这样写的:
SqlParameter[]insertParams=newSqlParameter[]
{
newSqlParameter("@username",SqlDbType.VarChar),
newSqlParameter("@pwd",SqlDbType.VarChar),
newSqlParameter("@email",SqlDbType.VarChar),
};
{
newSqlParameter("@username",SqlDbType.VarChar),
newSqlParameter("@pwd",SqlDbType.VarChar),
newSqlParameter("@email",SqlDbType.VarChar),
};
如果从存储过程中直接读取insertParams,只要用ConnectString和存储过程名生成一个SQLCommand,再执行 SqlCommandBuilder.DeriveParameters(SQLCommand)命令就可以自动根据存储过程中设置为SQLCommand准备好参数.最后再通过cmd.Parameters.CopyTo(selectParams,0)来获取参数selectParams.
代码如下:
using(SqlConnectioncn=newSqlConnection(connectionString))
using(SqlCommandcmd=newSqlCommand(spName,cn))//spName为存储过程名称
{
cn.Open();
cmd.CommandType=CommandType.StoredProcedure;
//设置SqlCommand中存储过程的参数
SqlCommandBuilder.DeriveParameters(cmd);
//存储过程的参数集合
SqlParameter[]selectParams=newSqlParameter[cmd.Parameters.Count];;
cmd.Parameters.CopyTo(selectParams,0);
}
using(SqlCommandcmd=newSqlCommand(spName,cn))//spName为存储过程名称
{
cn.Open();
cmd.CommandType=CommandType.StoredProcedure;
//设置SqlCommand中存储过程的参数
SqlCommandBuilder.DeriveParameters(cmd);
//存储过程的参数集合
SqlParameter[]selectParams=newSqlParameter[cmd.Parameters.Count];;
cmd.Parameters.CopyTo(selectParams,0);
}