Поле со списком не обновляется через адаптер данных SQL

#c# #sql #combobox #dataadapter

#c# #sql #поле со списком #dataadapter

Вопрос:

У меня возникла странная проблема, и я понятия не имею, происходит ли это из-за плохого соединения или причиной этого является что-то другое. Проблема: у меня есть поле со списком, и я заполняю значения, используя таблицу данных SQL в событии «Загрузка формы», и до сегодняшнего дня все работало нормально. Каждый раз, когда загружается форма, оба поля со списком пусты, одно для даты, а другое для названия компании. Код, который я использую, приведен ниже.

 public DataTable getResult(string query)
    {
        SqlDataAdapter da = new SqlDataAdapter();
        DataTable dt = new DataTable();
        SqlCommand cmd = new SqlCommand(query, con);
        cmd.CommandTimeout = 0;
        da.SelectCommand = cmd;
        da.Fill(dt);
        return dt;
    }
private void Reports_Load(object sender, EventArgs e)
    {
        RevenueDate_dt = func.getResult(dateQuery);

        foreach (DataRow dr in RevenueDate_dt.Rows)
        {
            comboBox1.Items.Add(dr["Global_Period_Month"].ToString());
        }

        Gpn_dt = func.getResult(GpnQuery);

        foreach (DataRow dr in Gpn_dt.Rows)
        {
            comboBox2.Items.Add(dr["gpnname"].ToString());
        }
    }
  

Запрос показывает идеальный результат, когда я выполняю его на SQL Server.
С нетерпением жду ответов.

Комментарии:

1. Поставьте точку останова в «return dt». Как выглядит datatable.

2. В нем отображаются строки 80 и нет имени таблицы! И все равно поле со списком пустое. Запрос выполнен нормально, и соединение в порядке

Ответ №1:

Трудно сказать, что происходит, но мне интересно, не является ли datatable немного излишним для того, что вы хотите. Похоже, что у обычного DataReader было бы намного меньше накладных расходов и его было бы проще отлаживать. Что-то вроде этого:

 public string[] getResult(string query, string ColumnName)
{
    List<string> results = new List<string>();

    SqlCommand cmd = new SqlCommand(query, con);
    cmd.CommandTimeout = 0;

    SqlDataReader reader = cmd.ExecuteReader();
    int col = reader.GetOrdinal(ColumnName);
    while (reader.Read())
    {
        results.Add(reader.GetString(col));
    }

    reader.Close();

    return results.ToArray();
}
  

И затем, чтобы добавить элементы в ваши поля со списком, это просто выглядело бы так:

 comboBox1.Items.AddRange(func.getResult(dateQuery, "Global_Period_Month"));
comboBox2.Items.AddRange(func.getResult(GpnQuery, "gpnname"));
  

Комментарии:

1. Спасибо @Hambone и да, это очень типичная ситуация и для меня: позавчера код работал нормально, но затем произошел сбой, но в любом случае спасибо за ответ, и код работает для меня сейчас. Ценю ваш ответ.

2. Спасибо за отзыв. Таблицы данных — это палка о двух концах. Очень полезно и справляется со многими тяжелыми задачами, но у них есть некоторые шероховатости. Я рад, что у вас это сработало.