Как обнулить DataSet - C#

160
30 марта 2018, 09:32

У меня есть метод для выполнения SQL запросов:

public static void Select(string mode, string[] attributes, string[] tables, string condition, string[] parameters, SqlDbType[] sqlDbType, Control[] control)
        {
            SqlCommand sqlCommand = new SqlCommand("SELECT " + string.Join(", ", attributes) + " FROM " + string.Join(", ", tables) + " " + condition + " ", Action.ExecuteConnection());
            if (mode == "Single")
            {
                if (parameters == null || sqlDbType == null || control == null)
                {
                    sqlDataReader = sqlCommand.ExecuteReader();
                }
                else
                {
                    for (int i = 0; i < parameters.Length; i++)
                    {
                        sqlCommand.Parameters.Add(parameters[i], sqlDbType[i]).Value = control[i].Text;
                    }
                    sqlDataReader = sqlCommand.ExecuteReader();
                }
            } else if (mode == "Multiple")
            {
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
                sqlDataAdapter.Fill(dataSet);
            }
            Console.WriteLine(DateTime.Now + ": Подгрузка данных из таблицы - [" + string.Join(", ", tables) + "]");
        }

Инициализация метода:

string[] parameters = { "@Username", "@Password" };
Command.Select("Single", new string[] { "EmployeeName", "UserSystem.UserPassword", "Position.PositionName" }, new string[] { "Employee" }, "INNER JOIN Position ON Employee.PositionID = Position.PositionID INNER JOIN UserSystem ON Employee.EmployeeID = UserSystem.EmployeeID WHERE Employee.EmployeeName =  " + parameters[0] + " AND UserSystem.UserPassword = " + parameters[1] + "", parameters, new SqlDbType[] { SqlDbType.NVarChar, SqlDbType.NVarChar }, new Control[] { comboBox_username, textBox_password });

Этот метод универсальный, если я хочу заполнить таблицу или получить данные по выборке и заполнить их в элемент управления, то для этого я вызываю этот метод. Но есть одна оплошность. У меня есть переменная:

public static DataSet dataSet = new DataSet();

В которую заполняются данные полученные запросом. Метод работает, но если я после одной заполненной таблицы захочу тут же создать другую, то у меня сливаются две таблицы, то есть

dataSet

Не обнуляется, а хранит старые данные. Как мне сделать этот метод универсальным, чтобы dataSet был свой для каждого экземпляра метода. Но также, я смог его вызвать из другого класса, для добавление например в

control.DataSource

Надеюсь я достаточно доступно объяснил.

Answer 1
public class SelectResult : IDisposable
{
  public DataSet dataset { get; set; }
  public SqlDataReader reader { get; set; }
  // TODO: implement IDisposable to dispose dataset/reader if they are not null
}
public static SelectResult Select(...)
{
  SelectResult result = new SelectResult();
    ...
    result.reader = sqlCommand.ExecuteReader();
    ...
    ...
    result.dataset = new DataSet();
    sqlDataAdapter.Fill(result.dataset);
    ...
  return result;
}
using (SelectResult result = ClassWithStaticSelectMethod.Select(...))
{
  // use result.dataset or result.reader
}
READ ALSO
Отслеживание события нажатия кнопки

Отслеживание события нажатия кнопки

Как мы можем отловить событие нажатия кнопки? Я пытался сделать что-то вроде

145
Удалённый запуск кода

Удалённый запуск кода

В общем реализовал код, который автоматически может менять обложку в вк (у меня смена происходит по таймеру пока)И тут возникает вопрос, а где...

205
Как избавиться от двойного цикла и оптимизировать алгоритм пересечения 3D объектов?

Как избавиться от двойного цикла и оптимизировать алгоритм пересечения 3D объектов?

Подскажите как оптимизировать данный алгоритмЗагружаю объект(у меня около 20 объектов

245
Autocomplete в vscode не работает как нужно

Autocomplete в vscode не работает как нужно

Пожалуйста подскажите, возможно ли настроить autocomplete (точнее IntelliSense) в vscode так (или стороннее расширение ) чтобы получать автодополнение когда...

282