1

次の接続文字列があります。以下の 2 つのメソッドは異なるストアド プロシージャを処理します。

同じ接続文字列を使用して個々のメソッドを呼び出すより効率的な方法はありますか。

手短に; 少ないコードで私がしていることを行う方法があるかどうかを単に尋ねているのですか?

私はこれらすべてをと呼ばれるクラスに持っていますDatabase:

class Database
{
  public static Int32 intReturnCode { get; set; }
  public static string DatabaseStatus { get; set; }

  static string source = 
  @"Server=MyServer;Database=MyDatabase;Integrated Security=True; Timeout=30";

  public static void InsertTracking(string UserID, string Department)
  {
    try
    {
      using (SqlConnection databaseConnection = new SqlConnection(source))
      {
        using (SqlCommand cmdSQL = new SqlCommand("usp_InsertUser", databaseConnection))

        {
          cmdSQL.CommandType = CommandType.StoredProcedure;

          cmdSQL.Parameters.Add(new SqlParameter("@UserID", SqlDbType.NChar, 8));
          cmdSQL.Parameters["@UserID"].Value = UserID;
          cmdSQL.Parameters["@UserID"].Direction = ParameterDirection.Input;

          cmdSQL.Parameters.Add(new SqlParameter("@Department", SqlDbType.NChar, 4));
          cmdSQL.Parameters["@Department"].Value = Department;
          cmdSQL.Parameters["@Department"].Direction = ParameterDirection.Input;

          cmdSQL.Parameters.Add(new SqlParameter("@ReturnCode", SqlDbType.Int));
          cmdSQL.Parameters["@ReturnCode"].Direction = ParameterDirection.ReturnValue;                  

          databaseConnection.Open();
          cmdSQL.ExecuteNonQuery();
          intReturnCode = Convert.ToInt16(cmdSQL.Parameters["@ReturnCode"].Value);

          databaseConnection.Close();
        }
      }
     }
     catch (Exception ex)
     {
       DatabaseStatus = ex.Message;
     }
   }

  public static int InitializeDatabase()
  {
    try
    {
      using (SqlConnection databaseConnection = new SqlConnection(source))
      {
        using (SqlCommand cmdSQL = new SqlCommand("usp_InitializeDatabase", databaseConnection))

        {
          cmdSQL.CommandType = CommandType.StoredProcedure;
          cmdSQL.Parameters.Add(new SqlParameter("@ReturnCode", SqlDbType.Int));
          cmdSQL.Parameters["@ReturnCode"].Direction = ParameterDirection.ReturnValue; 

          databaseConnection.Open();
          cmdSQL.ExecuteNonQuery();
          intReturnCode = Convert.ToInt16(cmdSQL.Parameters["@ReturnCode"].Value);

         databaseConnection.Close();
       }
     }
   }
   catch (Exception ex)
   {
     DatabaseStatus = ex.Message;
   }

   return intReturnCode;
  }
}
4

1 に答える 1

0

SqlCommand (usp_InsertUser SP の) および SqlConnection インスタントを共有できます。何度も「使用」して作成する必要はありません。

 static class Database
 {
     public static Int32 intReturnCode { get; set; }
     public static string DatabaseStatus { get; set; }
     static SqlConnection databaseConnection;
     static SqlCommand sqlCmd_usp_InsertUser;
     static SqlCommand sqlCmd_usp_InitializeDatabase;
     string source = @"Server=MyServer;Database=MyDatabase;Integrated Security=True; Timeout=30";

     //static initalizer
     static Database()
     {
         string source = @"Server=MyServer;Database=MyDatabase;Integrated Security=True; Timeout=30";
         databaseConnection = new SqlConnection(source);

         // usp_InsertUser
         sqlCmd_usp_InsertUser = new SqlCommand("usp_InsertUser", databaseConnection);
         sqlCmd_usp_InsertUser.CommandType = CommandType.StoredProcedure;

         sqlCmd_usp_InsertUser.Parameters.Add(new SqlParameter("@UserID", SqlDbType.NChar, 8) { Direction = ParameterDirection.Input });
         sqlCmd_usp_InsertUser.Parameters.Add(new SqlParameter("@Department", SqlDbType.NChar, 4) { Direction = ParameterDirection.Input });
         sqlCmd_usp_InsertUser.Parameters.Add(new SqlParameter("@ReturnCode", SqlDbType.Int) { Direction = ParameterDirection.ReturnValue });
     }


     public static void InsertTracking(string UserID, string Department)
     {
         try
         {
             if (databaseConnection.State != ConnectionState.Open)
                 databaseConnection.Open();
             sqlCmd_usp_InsertUser.Parameters["@UserID"].Value = UserID;
             sqlCmd_usp_InsertUser.Parameters["@Department"].Value = Department;
             sqlCmd_usp_InsertUser.ExecuteNonQuery();
             intReturnCode = Convert.ToInt16(sqlCmd_usp_InsertUser.Parameters["@ReturnCode"].Value);
             databaseConnection.Close();
         }
         catch (Exception ex)
         {
             DatabaseStatus = ex.Message;
         }
     }

     public static int InitializeDatabase()
     {
         try
         {
             SqlCommand cmdSQL = new SqlCommand("usp_InitializeDatabase", databaseConnection);
             cmdSQL.CommandType = CommandType.StoredProcedure;
             cmdSQL.Parameters.Add(new SqlParameter("@ReturnCode", SqlDbType.Int) { Direction = ParameterDirection.ReturnValue });

             if (databaseConnection.State != ConnectionState.Open)
                 databaseConnection.Open();

             cmdSQL.ExecuteNonQuery();
             intReturnCode = Convert.ToInt16(cmdSQL.Parameters["@ReturnCode"].Value);

             databaseConnection.Close();
         }
         catch (Exception ex)
         {
             DatabaseStatus = ex.Message;
         }
         return intReturnCode;
     }
 }
于 2013-10-06T09:47:24.203 に答える