// "Create" is a more general name for adding new data, return type is changed to "void"
        // AFTER
        // 10 microseconds
        public void CreateRegistryReferral(int grId, int referrerId, int referrerLinkId)
        {
            try
            {
                using (SqlConnection connection = new CrateSqlConnection())
                {
                    using (SqlCommand command = connection.CreateCommand())
                    {
                        command.CommandType = CommandType.StoredProcedure;
                        command.CommandText = "dbo.RegistryData_InsertReferral";

                        command.Parameters.AddWithValue("@grId", grId);  // use convenience method to avoid verbose settings
                        command.Parameters.AddWithValue("@referrerID", referrerId);
                        command.Parameters.AddWithValue("@referrerLinkID", referrerLinkId);
                        command.Parameters.AddWithValue("@last_mod_user", "CreateRegistryReferral");  // need a better key

                        connection.Open();

                        if (command.ExecuteNonQuery() == 0)
                        {
                            throw new InvalidOperationException("Failed to update");  // consider using a custom exception to be more specific
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException("Failed to update", ex);  // wrap SqlException and communicate as a general action failure message; make stored procedure return specific error message(code) for proper message
            }
        }
        // this is still not unit test friendly
        public string SelectTransactionSeed_Refactored()
        {
            int seed = 0;

            try
            {
                using (SqlConnection connection = new CrateSqlConnection())
                {
                    using (SqlCommand command = connection.CreateCommand())
                    {
                        command.CommandType = CommandType.StoredProcedure;
                        command.CommandText = "dbo.TransactionIDData_SelectTransActionID";
                        connection.Open();
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            if (reader.Read())
                            {
                                seed = (int)reader["Seed"];

                                WriteTraceWarn("Returning: " + seed.ToString());
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                // wrap SqlException and communicate as a general action failure message; make stored procedure return specific error message(code) for proper message
                throw new InvalidOperationException("Failed to get data", ex);
            }

            return ConvertLast4DigitsToString(seed);
        }