Как преобразовать выбранную дату в строку и посмотреть на DataGrid - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь найти данные между двумя датами и показать на сетке данных.Однако я получаю сообщение об ошибке, в котором говорится, что toString не может преобразовать выбранную дату в строку.

private void searchButton_Click(object sender, RoutedEventArgs e)
    {
        SqlConnection con = new SqlConnection(@"Data Source = xmsql04.australiaeast.cloudapp.azure.com,6302 ;Initial Catalog=DAD_TruckRental_RGM;Persist Security Info=True;User ID=xxxxxx;Password=xxxxxx");
        SqlDataAdapter sda = new SqlDataAdapter("SELECT RentalId,TruckId,CustomerID,TotalPrice,RentDate,ReturnDueDate FROM TruckRental where JoiningDate between'"+fromText.SelectedDate.Value.ToString("MM/DD/YYYY")+"'AND'"+toText1.SelectedDate.Value.ToString("MM/DD/YYYY")+"'", con);

        DataSet ds = new DataSet();

        sda.Fill(ds, "TruckRental");

        gridView2.ItemsSource = ds.DefaultViewManager;
    }

ОБНОВЛЕНИЕ: Я изменил свой код и избавился от ошибки.Тем не менее, данные не отображаются в сетке, только пустая строка.Кто-нибудь знает, почему это так?

string sqlStr = "SELECT RentalId,TruckId,CustomerID,TotalPrice,RentDate,ReturnDueDate FROM TruckRental where RentDate between @fromDT AND @toDT";
        string connStr = @"Data Source = xmsql04.australiaeast.cloudapp.azure.com,6302 ;Initial Catalog=DAD_TruckRental_RGM;Persist Security Info=True;User ID=xxxxxx;Password=xxxxxx";
        using (SqlConnection con = new SqlConnection(connStr))
        using (SqlDataAdapter sda = new SqlDataAdapter(sqlStr, con))
        {
            sda.SelectCommand.Parameters.Add(new SqlParameter("@toDT", SqlDbType.DateTime)).Value = toText1.SelectedDate.Value;
            sda.SelectCommand.Parameters.Add(new SqlParameter("@fromDT", SqlDbType.DateTime)).Value = fromText.SelectedDate.Value;

            DataSet ds = new DataSet();
            con.Open();
            sda.Fill(ds, "TruckRental");
            gridView2.ItemsSource = ds.DefaultViewManager;
        }

1 Ответ

0 голосов
/ 19 ноября 2018

В вашем коде есть некоторые проблемы.

  1. Ваша строка подключения con не открылась при использовании метода Fill, поэтому вы не можете выполнить инструкцию SQL.
  2. В вашем коде есть проблема SQL-инъекция . Я бы посоветовал вам использовать параметры вместо подключенной строки оператора SQL, убедитесь, что размер типа данных вашего параметра совпадает с размером таблицы.
  3. Вы не вернули ресурс, когда закончите, выполнив оператор SQL, я бы использовал оператор using, потому что цель оператора Using состоит в том, что, когда управление достигнет конца использования, оно избавится от этого объекта использования. заблокировать и освободить память. он предназначен не только для автоматического закрытия соединения, в основном он избавляется от объекта соединения, и, очевидно, соединение также закрывается из-за него.

используя класс SqlParameter, чтобы сделать это.

private void searchButton_Click(object sender, RoutedEventArgs e)
{
    string sqlStr = "SELECT RentalId,TruckId,CustomerID,TotalPrice,RentDate,ReturnDueDate FROM TruckRental where JoiningDate between @fromDt AND @toDt";
    string connStr = @"Data Source = xmsql04.australiaeast.cloudapp.azure.com,6302 ;Initial Catalog=DAD_TruckRental_RGM;Persist Security Info=True;User ID=DDQ4_Melveena;Password=xxxxx";
    using (SqlConnection con = new SqlConnection(connStr))
    using (SqlDataAdapter sda = new SqlDataAdapter(sqlStr, con))
    {
        sda.SelectCommand.Parameters.Add(new SqlParameter("@toDt", SqlDbType.DateTime)).Value = toText1.SelectedDate.Value;
        sda.SelectCommand.Parameters.Add(new SqlParameter("@fromDt", SqlDbType.DateTime)).Value = fromText.SelectedDate.Value;

        DataSet ds = new DataSet();
        con.Open();
        sda.Fill(ds, "TruckRental");
        gridView2.ItemsSource = ds.DefaultViewManager;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...