使用参数和返回值执行存储过程



我正在尝试执行一个接受参数并返回参数的存储过程。当我在管理工作室中单独运行该过程时,一切正常。但是,如果我尝试从代码运行该过程,则会收到"执行超时已过期"错误。我怀疑我没有正确传递输出参数:

List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@BankType", "Checking"));
parameters.Add(new SqlParameter("@VendorEmail", "vendorEmail@yahoo.com"));
parameters.Add(new SqlParameter("@ID", 12345));
SqlParameter outputParameter = new SqlParameter();
outputParameter.ParameterName = "@Confirm";
outputParameter.SqlDbType = System.Data.SqlDbType.Bit;
outputParameter.Direction = System.Data.ParameterDirection.Output;
parameters.Add(outputParameter);
myEntity.Database.ExecuteSqlCommand("exec TestStoredProc @BankType, @VendorEmail, @ID, @Confirm out", parameters.ToArray());

试试这种方法:

var bankParameter =
new SqlParameter("@BankType", SqlDbType.VarChar) { Value = "Checking" };
var emailParameter =
new SqlParameter("@VendorEmail", SqlDbType.VarChar) { Value = "vendorEmail@yahoo.com" };
var idParameter =
new SqlParameter("@ID", SqlDbType.Int32) { Value = 12345 };
var conStr = "yourConnectionString";
using (SqlConnection sConn = new SqlConnection(conStr))
{
using (SqlCommand sComm = new SqlCommand("TestStoredProc", sConn))
{
sComm.CommandTimeout = 60;
sComm.CommandType = CommandType.StoredProcedure;
sComm.Parameters.Add(bankParameter);
sComm.Parameters.Add(emailParameter);
sComm.Parameters.Add(idParameter);
var returnParameter = sComm.Parameters.Add("@Confirm", SqlDbType.Bit);
returnParameter.Direction = ParameterDirection.ReturnValue;

sConn.Open();
//// NonQuery
sComm.ExecuteNonQuery();
var result = returnParameter.Value;
}
}

这段代码有一些缺陷(例如没有给出 conStr 或错误的数据类型(,但如果您根据需要调整它们,应该可以工作。主要区别在于我的Direction

returnParameter.Direction = ParameterDirection.ReturnValue;

而你的是

outputParameter.Direction = System.Data.ParameterDirection.Output;

另外,我添加了CommandTimeout = 60,因为,您的代码可能没有任何问题,但是您的SP太长了。

由于声誉原因无法发表评论。

但是您的代码不会将输出参数添加到参数中。

最新更新