C# 使用参数和返回值执行存储过程
我试图执行一个存储过程,该过程接受参数并返回参数。当我在ManagementStudio中单独运行该过程时,一切正常。但是,如果我试图从代码中运行该过程,就会出现“执行超时过期”错误。我怀疑我没有正确地传递输出参数:C# 使用参数和返回值执行存储过程,c#,entity-framework,C#,Entity Framework,我试图执行一个存储过程,该过程接受参数并返回参数。当我在ManagementStudio中单独运行该过程时,一切正常。但是,如果我试图从代码中运行该过程,就会出现“执行超时过期”错误。我怀疑我没有正确地传递输出参数: List<SqlParameter> parameters = new List<SqlParameter>(); parameters.Add(new SqlParameter("@BankType", "Checking")); parameters.A
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());
List参数=新列表();
添加(新的SqlParameter(“@BankType”,“Checking”);
添加(新的SqlParameter(“@VendorEmail”,”vendorEmail@yahoo.com"));
添加(新的SqlParameter(“@ID”,12345));
SqlParameter outputParameter=新的SqlParameter();
outputParameter.ParameterName=“@Confirm”;
outputParameter.SqlDbType=System.Data.SqlDbType.Bit;
outputParameter.Direction=System.Data.ParameterDirection.Output;
参数。添加(outputParameter);
myEntity.Database.ExecuteSqlCommand(“exec TestStoredProc@BankType、@VendorEmail、@ID、@Confirm out”、parameters.ToArray());
由于声誉问题,无法发表评论
但是您的代码没有将outputParameter添加到参数中。由于信誉问题,无法进行评论 但是您的代码不会将outputParameter添加到参数中。尝试以下方法:
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;
}
}
这段代码有一些缺陷(例如没有给定contr或错误的数据类型),但是如果您根据自己的需要调整它们,应该可以工作。主要区别在于我的方向是
returnParameter.Direction = ParameterDirection.ReturnValue;
而你的
outputParameter.Direction = System.Data.ParameterDirection.Output;
另外,我添加了CommandTimeout=60
,因为您的代码可能没有问题,但您的SP太长了 试试这种方法:
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;
}
}
这段代码有一些缺陷(例如没有给定contr或错误的数据类型),但是如果您根据自己的需要调整它们,应该可以工作。主要区别在于我的方向是
returnParameter.Direction = ParameterDirection.ReturnValue;
而你的
outputParameter.Direction = System.Data.ParameterDirection.Output;
另外,我添加了CommandTimeout=60
,因为您的代码可能没有问题,但您的SP太长了 可能类似于我看过你的建议,但该建议并没有解决我的问题。为什么你会看到执行超时,并认为这是因为你传递的参数错误?如果它说这是一个执行超时,你应该假设这正是它,除非你能证明不是这样。错误是否总是在设定的秒数之后发生?你试过增加超时时间吗?当您通过SSMS运行它时,执行需要多长时间?可能类似于我查看了您的建议,但该建议没有解决我的问题。为什么您会看到执行超时,并认为这是因为您传递的参数错误?如果它说这是一个执行超时,你应该假设这正是它,除非你能证明不是这样。错误是否总是在设定的秒数之后发生?你试过增加超时时间吗?当您通过SSMS运行它时,执行需要多长时间?我没有粘贴这行代码。现在正在编辑。仍然是相同的错误。代码看起来是正确的。您是否检查了连接字符串以查看您的程序是否可以连接到服务器?是的,我正在对数据库进行不同的调用。其余的都很好,我没有粘贴这行代码。现在正在编辑。仍然是相同的错误。代码看起来是正确的。您是否检查了连接字符串以查看您的程序是否可以连接到服务器?是的,我正在对数据库进行不同的调用。其余的都很好