我的调用函数(BLL层)
public static int Add(MODEL.M_Users m)
{
string str = "dbo.SaveUsers";
SqlParameter[] sqlParameter ={
new SqlParameter("@UserID",m.UserID),
new SqlParameter("@Name", m.Name),
new SqlParameter("@Pwd", m.Pwd),
new SqlParameter("@Address", m.Address),
new SqlParameter("@Tele",m.Tele),
new SqlParameter("@Email",m.Email),
new SqlParameter("@CreatTime", m.CreatTime),
new SqlParameter("@Power", m.Power)
}; try
{
DAL.DAL dal = new DAL.DAL();
return dal.Add(str,sqlParameter);
}
catch (SqlException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
}连接数据库的函数(DAL层)
public int Add(string str, SqlParameter[] sql)
{
try
{
using (SqlConnection sqlConnection = new SqlConnection())
{
sqlConnection.ConnectionString = DBcon;
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand(str, sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.AddRange(sql);
sqlCommand.Parameters.Add("@ResultID",SqlDbType.Int);
sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.ReturnValue;
sqlCommand.ExecuteNonQuery();
int newid = Convert.ToInt32(sqlCommand.Parameters["@ResultID"].Value);
return newid;
}
}
catch (Exception E)
{
throw E;
}
}红色部分报错:
过程或函数 'SaveUsers' 需要参数 '@ResultID',但未提供该参数。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 过程或函数 'SaveUsers' 需要参数 '@ResultID',但未提供该参数。
public static int Add(MODEL.M_Users m)
{
string str = "dbo.SaveUsers";
SqlParameter[] sqlParameter ={
new SqlParameter("@UserID",m.UserID),
new SqlParameter("@Name", m.Name),
new SqlParameter("@Pwd", m.Pwd),
new SqlParameter("@Address", m.Address),
new SqlParameter("@Tele",m.Tele),
new SqlParameter("@Email",m.Email),
new SqlParameter("@CreatTime", m.CreatTime),
new SqlParameter("@Power", m.Power)
}; try
{
DAL.DAL dal = new DAL.DAL();
return dal.Add(str,sqlParameter);
}
catch (SqlException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
}连接数据库的函数(DAL层)
public int Add(string str, SqlParameter[] sql)
{
try
{
using (SqlConnection sqlConnection = new SqlConnection())
{
sqlConnection.ConnectionString = DBcon;
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand(str, sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.AddRange(sql);
sqlCommand.Parameters.Add("@ResultID",SqlDbType.Int);
sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.ReturnValue;
sqlCommand.ExecuteNonQuery();
int newid = Convert.ToInt32(sqlCommand.Parameters["@ResultID"].Value);
return newid;
}
}
catch (Exception E)
{
throw E;
}
}红色部分报错:
过程或函数 'SaveUsers' 需要参数 '@ResultID',但未提供该参数。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 过程或函数 'SaveUsers' 需要参数 '@ResultID',但未提供该参数。
ALTER PROCEDURE [dbo].[SaveUsers]
@UserID int,
@Name varchar(30),
@Pwd varchar(20),
@Address varchar(50),
@Tele varchar(20),
@Email varchar(30),
@CreatTime datetime,
@Power int,
@ResultID int output
AS
BEGIN TRAN SAVEUSERS
IF @UserID=0
--创建新用户
BEGIN
INSERT INTO [dbo].[Users] (
[Name],
Pwd,
Address,
Tele,
Email,
CreatTime,
[Power]
)VALUES
(@Name,
@Pwd,
@Address,
@Tele,
@Email,
getdate(),
@Power
)
select @ResultID=@@IDENTITY
END
ELSE
--更新信息
BEGIN
UPDATE [dbo].[Users]
SET [Name]=@Name,
Pwd=@Pwd,
Address=@Address,
Tele=@Tele,
Email=@Email
WHERE UserID=@UserID
select @ResultID=@UserID
END
COMMIT TRAN SAVEUSERS不知道哪里错了,大侠们救命啊!
在参数数组中再添加一个
new SqlParameter("@ResultID", sqlDataType.int)
这个数组参数里面有@ResultID吗?
打断点检查一下
sqlCommand.Parameters.AddRange(sql);
sqlCommand.Parameters.Add("@ResultID",SqlDbType.Int);
sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.ReturnValue;
……
设置断点调试看看
SqlConnection Conn;
Conn = new SqlConnection(ConnStr);
Conn.Open();
SqlCommand Cmd = new SqlCommand(procName, Conn);
Cmd.CommandType = CommandType.StoredProcedure;
if (prams != null)
{
foreach (SqlParameter parameter in prams)
Cmd.Parameters.Add(parameter);
}
Cmd.Parameters.Add(
new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null));
Return Convert.ToInt32(cmd.Parameters("RETURN_VALUE").Value)
如果要设置为空值,可以考虑一下是否是数据库中的 <NULL>值,如果是这个数据库的空值,可以这样来设置(示例): string sSql = "INSERT INTO tblItem(ItemNo, ItemCode, ISType) VALUES(@ItemNo, @ItemCode, @ISType)";
SqlParameter[] parameters = {
new SqlParameter("@ItemNo", SqlDbType.VarChar, 16),
new SqlParameter("@ItemCode", SqlDbType.VarChar, 20),
new SqlParameter("@ISType", SqlDbType.VarChar, 16)};
parameters[0].Value = "ITM001";
parameters[1].Value = DBNull.Value;
parameters[2].Value = DBNull.Value;
cmd.CommandText = sSql;
foreach (SqlParameter parm in parameters)
cmd.Parameters.Add(parm);cmd.ExecuteNonQuery();
sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.ReturnValue;
sqlCommand.ExecuteNonQuery();
int newid = Convert.ToInt32(sqlCommand.Parameters["@ResultID"].Value);
该成: SqlParameter returnValue = sqlCommand.Parameters.Add("returnValue", SqlDbType.Int, 4);
returnValue.Direction = ParameterDirection.ReturnValue;
int newid = Convert.ToInt32(returnValue.Value.ToString());
该这里sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.outPut;
sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.ReturnValue;
-->
sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.Output;ouput是输出,returnvalue是返回的值,也就是接收在存储过程中return '你想要的数据'要得到这个值,代码可如下:
sqlCommand.Parameters.Add("RETURN_VALUE", SqlDbType.Int);
sqlCommand.Parameters["RETURN_VALUE"].Direction = ParameterDirection.ReturnValue;
string myreturn = cm.Parameters["RETURN_VALUE11"].Value;注:RETURN_VALUE自定义,存储过程只要有return '你的数据'就可以了。
4 是returnValue的长度可以不写这我没看清 你是有输出参数的而不是返回值 应该改成sqlCommand.Parameters["@ResultID"].Direction = ParameterDirection.outPut