使用相同的参数在C#中执行多个SQL Server存储过程

使用相同的参数在C#中执行多个SQL Server存储过程,c#,.net,visual-studio,stored-procedures,sql-server-2014,C#,.net,Visual Studio,Stored Procedures,Sql Server 2014,想知道我是否在同一个using块中执行多个存储过程,参数是否会传递给每个存储过程,或者我是否需要显式地将相同的参数添加到每个存储过程中 using (sqlConnection) { SQLCommand cmd = new SQLCommand("sproc1", sqlConnection) cmd.CommandType = CommandType.StoredProcedure; //adding parameters for the first SQL que

想知道我是否在同一个using块中执行多个存储过程,参数是否会传递给每个存储过程,或者我是否需要显式地将相同的参数添加到每个存储过程中

using (sqlConnection)
{
    SQLCommand cmd = new SQLCommand("sproc1", sqlConnection)
    cmd.CommandType = CommandType.StoredProcedure;

    //adding parameters for the first SQL query
    cmd.Parameters.Add(new SQLParameter("@ID", id));
    cmd.Parameters.Add(new SQLParameter("@Sport", sportId));
    cmd.Parameters.Add(new SQLParameter("@Player", playerId));
    cmd.ExecuteNonQuery();

    cmd.CommandText = "sproc2";
    cmd.CommandType = CommandType.StoredProcedure;
    //Will parameters from above be passed in this stored procedure, or will they need to be added again?
    cmd.ExecuteNonQuery();
};

对。但是,出于三个维护原因,我不会这样做:

  • 这是不正常的(至少我从未见过),所以这段代码可能会被其他开发人员或未来的您误读

  • 如果只重用了部分参数,而不是全部参数,则每个存储过程都会有新的
    Add()
    s。在阅读代码时,很难跟踪任何给定存储过程使用的确切参数

  • using (sqlConnection)
    {
        SQLCommand cmd = new SQLCommand("sproc1", sqlConnection)
        cmd.CommandType = CommandType.StoredProcedure;
    
        //adding parameters for the first SQL query
        cmd.Parameters.Add(new SQLParameter("@ID", id));
        cmd.Parameters.Add(new SQLParameter("@Sport", sportId));
        cmd.Parameters.Add(new SQLParameter("@Player", playerId));
        cmd.ExecuteNonQuery();
    
        cmd.CommandText = "sproc2";
        cmd.CommandType = CommandType.StoredProcedure;
        //Will parameters from above be passed in this stored procedure, or will they need to be added again?
        cmd.ExecuteNonQuery();
    };
    
  • 不同的存储过程调用不再是模块化的。每个参数都依赖于先前添加到
    SQLCommand
    中的参数

  • 如果您发现自己在不同的存储过程调用之间重用了一组变量,那么我将创建一个方法,将这些变量添加到
    SQLCommand
    并返回
    SQLCommand
    ,然后为每个存储过程调用该方法


    是的,这只需要很少的额外处理时间,但它会使代码更易于维护。

    是的。但是,出于三个维护原因,我不会这样做:

  • 这是不正常的(至少我从未见过),所以这段代码可能会被其他开发人员或未来的您误读

  • 如果只重用了部分参数,而不是全部参数,则每个存储过程都会有新的
    Add()
    s。在阅读代码时,很难跟踪任何给定存储过程使用的确切参数

  • using (sqlConnection)
    {
        SQLCommand cmd = new SQLCommand("sproc1", sqlConnection)
        cmd.CommandType = CommandType.StoredProcedure;
    
        //adding parameters for the first SQL query
        cmd.Parameters.Add(new SQLParameter("@ID", id));
        cmd.Parameters.Add(new SQLParameter("@Sport", sportId));
        cmd.Parameters.Add(new SQLParameter("@Player", playerId));
        cmd.ExecuteNonQuery();
    
        cmd.CommandText = "sproc2";
        cmd.CommandType = CommandType.StoredProcedure;
        //Will parameters from above be passed in this stored procedure, or will they need to be added again?
        cmd.ExecuteNonQuery();
    };
    
  • 不同的存储过程调用不再是模块化的。每个参数都依赖于先前添加到
    SQLCommand
    中的参数

  • 如果您发现自己在不同的存储过程调用之间重用了一组变量,那么我将创建一个方法,将这些变量添加到
    SQLCommand
    并返回
    SQLCommand
    ,然后为每个存储过程调用该方法


    是的,这只需要很少的额外处理时间,但它会使您的代码更易于维护。

    是什么阻止了您自己尝试它?这会起作用,但不会。维护噩梦/糟糕的做法。参数和其他
    SqlCommand
    状态在
    Execute…
    调用之间被保留。@dlatikay重用
    SqlCommand
    实例本身并不是一个糟糕的做法。感谢大家对它的理解和对实践的看法,但我相信@levinja已经回答了我的问题彻底地提问。是什么阻止了你自己去尝试呢?那会管用的,但不要。维护噩梦/糟糕的做法。参数和其他
    SqlCommand
    状态在
    Execute…
    调用之间被保留。@dlatikay重用
    SqlCommand
    实例本身并不是一个糟糕的做法。感谢大家对它的理解和对实践的看法,但我相信@levinja已经回答了我的问题彻底提问。感谢您对此@Levinja的回复,因为我只考虑我自己使用它,而不是我后面的后续人员的最佳实践。要回答您关于多个存储过程中相同参数的问题,是的,每个存储过程都包含相同的参数,因此我可能会考虑创建一个方法来为我处理这些参数。感谢您对@Levinija的回复,因为我只是考虑我使用它,而不是我后面的后续人员的最佳实践。要回答您关于多个存储过程中相同参数的问题,是的,每个存储过程都包含相同的参数,因此我可能会考虑创建一个方法来处理这些参数。