我正在尝试执行一个带参数并返回参数的存储过程。当我在Management Studio中单独运行该程序时,一切正常。但是,如果我尝试从代码中运行该过程,则会收到“执行超时已过期”错误。我怀疑我没有正确传递输出参数:
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());
答案 0 :(得分:2)
尝试这种方法:
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;
}
}
这段代码有一些缺陷(例如没有给定的约束或错误的数据类型),但是如果您根据需要进行调整,它们应该可以工作。主要区别是我的Direction
是
returnParameter.Direction = ParameterDirection.ReturnValue;
你是
outputParameter.Direction = System.Data.ParameterDirection.Output;
我还添加了CommandTimeout = 60
,因为可能您的代码没有问题,但是您的SP太长了。
答案 1 :(得分:1)
由于声誉无法发表评论。
但是您的代码没有将 outputParameter 添加到参数。