Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用参数和返回值执行存储过程_C#_Entity Framework - Fatal编程技术网

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

C# 使用参数和返回值执行存储过程,c#,entity-framework,C#,Entity Framework,我试图执行一个存储过程,该过程接受参数并返回参数。当我在ManagementStudio中单独运行该过程时,一切正常。但是,如果我试图从代码中运行该过程,就会出现“执行超时过期”错误。我怀疑我没有正确地传递输出参数: List<SqlParameter> parameters = new List<SqlParameter>(); parameters.Add(new SqlParameter("@BankType", "Checking")); parameters.A

我试图执行一个存储过程,该过程接受参数并返回参数。当我在ManagementStudio中单独运行该过程时,一切正常。但是,如果我试图从代码中运行该过程,就会出现“执行超时过期”错误。我怀疑我没有正确地传递输出参数:

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运行它时,执行需要多长时间?我没有粘贴这行代码。现在正在编辑。仍然是相同的错误。代码看起来是正确的。您是否检查了连接字符串以查看您的程序是否可以连接到服务器?是的,我正在对数据库进行不同的调用。其余的都很好,我没有粘贴这行代码。现在正在编辑。仍然是相同的错误。代码看起来是正确的。您是否检查了连接字符串以查看您的程序是否可以连接到服务器?是的,我正在对数据库进行不同的调用。其余的都很好