Я пытаюсь найти данные между двумя датами и отобразить их в сетке данных. Однако я получаю сообщение об ошибке, в котором говорится, что 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;
}
Возможный дубликат Каковы хорошие способы предотвратить SQL-инъекцию?
Рекомендуем сразу удалить свой вопрос, так как в нем есть то, чего не следует





В вашем коде есть некоторые проблемы.
con не открывалась при использовании метода Fill, поэтому вы не можете выполнить инструкцию 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;
}
}
Этот ответ помешал мне получить ошибку. Однако, когда я нажимаю кнопку поиска, никакие данные не отображаются в сетке данных, только пустая строка. Вы бы хоть представляли, почему это так? @ D-Shih
@GraceDelosReyes убедитесь, что условие содержит строки данных, вы можете установить точку останова, чтобы увидеть, есть ли какие-либо строки данных в ds.
Похоже, что в ds @ D-Shih нет данных
Пожалуйста, обновите вопрос, добавив точное исключение.