Member 9983063 Ответов: 3

Как выбрать данные из даты


Привет, ребята, я выбираю данные из базы данных в datagridview, но когда я выбираю данные, так что datagridview показывает пустой

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

connection.Open();
            DataSet dsa = new DataSet();
            DataTable dt = new DataTable();
            dsa.Tables.Add(dt);
            OleDbDataAdapter da = new OleDbDataAdapter();
            da = new OleDbDataAdapter("SELECT * from [Sales Record] where [Cash Sales] = '" + "Cash Sales" + "'And[Date] =#"+System.DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss:tt")+"#", connection);
            da.Fill(dt);
            dataGridView1.DataSource = dt;

            connection.Close();

[no name]

Использование правильного параметризованного запроса, как вам уже сказали, может просто заставить вашу ошибку исчезнуть сама по себе.

Peter Leow

эта система.Датавремя.Сейчас.Метод toString("ДД/ММ/гггг чч:мм:СС:ТТ") возвращает объект datetime, когда SQL-запрос выполняется. Вы уверены,что есть такие записи с этой датой и временем?

3 Ответов

Рейтинг:
2

Wendelius

Есть довольно много проблем, которые нужно исправить. Рассмотрим следующую альтернативу

string sql;
DataSet dsa = new DataSet();
DataTable dt = new DataTable();
dsa.Tables.Add(dt);
using (OleDbConnection connection = new OleDbConnection(connectionString)) {
   sql = @"SELECT * 
FROM  [Sales Record] 
WHERE [Cash Sales] = 'Cash Sales'
AND   [Date]       = @datecriteria";
   OleDbDataAdapter da =new OleDbDataAdapter(sql, connection);

   da.SelectCommand.Parameters.Add("@datecriteria", OleDbType.Date).Value = System.DateTime.Now;
   try {
       connection.Open();
       adapter.Fill(dt);
   }
   catch (Exception ex) {
      // do some proper error handling
   }
}

Очень важно всегда использовать параметры, чтобы предотвратить SQL-инъекция[^] и использовать использование блоков для обеспечения надлежащего распоряжения ресурсами.

Что касается самих критериев, то выглядит немного странно, что вы связываете статический текст с предложением where и используете текущее время для этих критериев. Просто догадываюсь, но если вы хотите искать записи на сегодняшний день, а не
da.SelectCommand.Parameters.Add("@datecriteria", OleDbType.Date).Value = System.DateTime.Now;
использовать
da.SelectCommand.Parameters.Add("@datecriteria", OleDbType.Date).Value = System.DateTime.Now.Date;


Рейтинг:
2

Pradeep Prasanna Ekanayaka

Использовать этот код.. Не используйте sql quary таким образом. используйте параметры mysql. если нет коды не являются подлинными

хорошо попробуйте этот код

private void LoadData()
       {
           try
           {
               using (OleDbConnection connection = new OleDbConnection(connectionString))
               {
                   using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM  [Sales Record] WHERE [Cash Sales] = 'Cash Sales' AND [Date] = @datecriteria", /* Please Enter Connection Name to this place*/))
                   {
                       connection.Open();
                       oda.SelectCommand.Parameters.Clear();
                       oda.SelectCommand.Parameters.AddWithValue("@datecriteria", System.DateTime.Now);
                       DataTable dt = new DataTable();
                       oda.Fill(dt);
                       if (dt.Rows.Count > 0)
                       {
                           oda.Fill(dt);
                           dataGridView1.DataSource = dt;
                       }
                       else
                       {
                           dataGridView1.DataSource = null;
                       }
                       connection.Close();
                   }

               }
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.ToString());
           }

       }

после этого вызовите этот метод в событии button click следующим образом


private void button1_Click(object sender, EventArgs e)
       {
           LoadData();
       }

если есть какие-либо вопросы, пожалуйста, прокомментируйте ...
спасибо


Рейтинг:
0

OriginalGriff

Не делай этого так. Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы. С датами это также может устранить проблемы перевода, когда сервер БД интерпретирует европейский формат даты как US и сравнивает строки с mm/dd/yyyy вместо этого.

Имейте в виду, что (как вам уже сказали) Ваша строка даты возвращает текущую дату во вторую, и маловероятно, что существует много или вообще какие-либо записи с этим значением. И если этот запрос выполняется на разных компьютерах, он, скорее всего, вернет разные значения времени для всех них - часы ПК не особенно синхронизированы. Если вам нужна точность до секунды, вы, вероятно, захотите использовать один согласованный Источник времени для ваших проверок и вставки / обновления строк, что означает, что вы всегда должны использовать значения даты и времени сервера БД с помощью функции GETDATE.

Если вы ищете строки сегодня, используйте DateTime.Now.Date, передайте его как параметризованное значение и сравните его с "больше или равно "вместо" равно"