Member 9983063 Ответов: 2

Возвращает нулевые значения из базы данных


Привет ребята я выбираю данные из базы данных и во второй раз когда я выбираю данные из предложения where dt1 так что я получаю возвращаемые нулевые значения я не получаю никакой ошибки но это возвращает мне нулевые значения

Что я уже пробовал:

con_string.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0;Data Source =|DataDirectory|\Restaurant.accdb;Persist Security Info=False";
            con_string.Open();
            DataSet dsa2 = new DataSet();
            DataTable dt2 = new DataTable();
            dsa2.Tables.Add(dt2);
            OleDbDataAdapter da2 = new OleDbDataAdapter();
            da2 = new OleDbDataAdapter(string.Format("SELECT column2 FROM Total  Where [Date] between #{0}# AND #{1}#  Group By column2", dateTimePicker1.Text, dateTimePicker2.Text), con_string);
            da2.Fill(dt2);
            con_string.Close();
            //--------------------------------------------------------------------------------
            con_string.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0;Data Source =|DataDirectory|\Restaurant.accdb;Persist Security Info=False";
            con_string.Open();
            DataSet dsa = new DataSet();
            DataTable dt1 = new DataTable();
            dsa.Tables.Add(dt1);
            OleDbDataAdapter da = new OleDbDataAdapter();
            da = new OleDbDataAdapter(string.Format(string.Format("SELECT column2,Sum(MediumVal) As [Dine In], Sum(LargeVal) As [Deliery], Sum(RoyalVal) As [Take Away] From ( SELECT column2 As [column2], Switch(column3 like 'DineIn%', 1,True,0) As [MediumVal], Switch(column3 like 'Delivery%',1,True,0) As [LargeVal], Switch(column3 like 'TakeAway%', 1,True,0) As [RoyalVal] FROM Total  Where [Date] between #{{0}}# AND #{{1}}# AND [column2] IN('{0}') ) Group By column2", dt2.Columns["column2"]), dateTimePicker1.Text, dateTimePicker2.Text), con_string);
            da.Fill(dt1);
            dataGridView1.DataSource = dt1;
            con_string.Close();
            dataGridView1.Columns[0].Width = 286;
            dataGridView1.Columns[1].Width = 180;
            dataGridView1.Columns[2].Width = 180;
            dataGridView1.Columns[3].Width = 180;

[no name]

Если вы получаете null из базы данных, проверяли ли вы, есть ли в базе данных значения?

Member 9983063

БД имеет значения

2 Ответов

Рейтинг:
1

Bryian Tan

Часть этого запроса может быть проблемой. Код имеет двойные фигурные скобки вместо одной.

FROM Total  Where [Date] between #{{0}}# AND #{{1}}# AND [column2]


Так и должно быть

FROM Total  Where [Date] between #{0}# AND #{1}# AND [column2]


Рейтинг:
0

OriginalGriff

И причина в том, что либо форматы дат по какой-то причине не совпадают, поэтому SQL получает их неправильно, либо нет данных, которые попадают в этот диапазон.

Начните с того, что не объединяйте строки для формирования SQL-команд: используйте параметризованный запрос и непосредственно передавайте значения DateTimePicker DateTime вместо того, чтобы сначала преобразовывать их в строки. Таким образом, фактическая дата-время используется SQL без какого-либо риска неправильной интерпретации при обработке строки. Вы никогда не должны объединять строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Затем проверьте свою БД: убедитесь, что вы храните столбец [Date] как значение DATE, DATETIME или DATETIME2, а не как строку. Да, да, я знаю. Но вы были бы удивлены, сколько людей хранят даты как NVARCHAR, а затем ведут себя очень удивленно, когда сравнения, такие как между использованием правил сравнения NVARCHAR, не датируются, и они не получают желаемых результатов.

Как только все это будет проверено, используйте отладчик, чтобы посмотреть на диапазоны дат, которые вы передаете: SQL / Access не будет "переупорядочивать" начало и конец, чтобы сделать их разумными, поэтому, если более поздняя дата будет первой, вы не получите никаких результатов. Если все в порядке, посмотрите непосредственно на таблицу базы данных и вручную убедитесь, что даты в этом диапазоне действительно существуют.

Извините, но мы не можем сделать ничего из этого для вас!