Member 12852119 Ответов: 3

Пожалуйста, помогите мне просмотреть код и получить правильный код


я хочу сравнить текущую дату с датой базы данных, которая является датой истечения срока действия...если текущая дата больше, чем дата истечения срока действия в базе данных, то столбец состояния в базе данных должен быть изменен на "истекший" с помощью C#...я не получаю код для реализации этого pls help me its a window application...

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

string constring = " источник данных=LENOVO-PC\ \ SUMIT;начальный каталог=Ngo_Mgmt;идентификатор пользователя=sa;пароль=123";
SqlConnection con = new SqlConnection(constring);
пробовать
{
против.Открыть();
Команда sqlcommand команду cmd = новый sqlcommand, который();
УМК.Подключение = кон;
УМК.CommandType = CommandType. Text;
УМК.Свойства commandtext = "выбрать Subscription_Expire,состояние,текущая дата с методами addmember";
SqlDataReader dr = cmd.Метода executereader();
если (dr. HasRows)
{
в то время как (dr. Read())
{
если (д-р["Subscription_Expire"].Метод toString().Отделка() == доктор["текущая дата"].ToString (). Trim())
{


УМК.Свойства commandtext = "метод addmember обновление установить статус=@статус ";
строка ans= " истек срок действия";
УМК.Параметры.AddWithValue ("@Status", ans);
УМК.Метод executenonquery();
}

}
}

ещё
{
// MessageBox.Show ("такой записи не существует", " Alert!");
}
УМК.Располагать();
др.Рядом();
}
поймать (исключение бывший)
{
// MessageBox.Показать ("не удается открыть соединение ! ");
}
наконец
{
против.Закрывать();
}

3 Ответов

Рейтинг:
1

OriginalGriff

Не делай этого! Никогда не преобразуйте даты в строки и не пытайтесь преобразовать их - всегда оставляйте их как объекты DateTime и сравнивайте их.

DateTime expireDate = (DateTime) dr["Subscription_Expire"];
if (expireDate <= DateTime.Now.Date)
   {
   // Expired.
   ...
Это предполагает, что ваша БД содержит даты в виде столбцов DATE или DATETIME - и если это не так, то это должно быть как строковые даты, вызывающие огромные проблемы очень, очень быстро!


Рейтинг:
1

Member 10425001

возможно, лучшим решением был бы вычисляемый столбец в БД.

создать таблицу test1
(
column1 int identity (1,1) not null primary key,
column2 datetime2 not null default(sysdatetime()),
column3 как случай, когда column2 < sysdatetime () затем 'this'
еще "тот" конец
)

вставить в тест1 (столбец 2) Выберите "1/1/2010"
вставить в тест1 (столбец 2) Выберите "1/1/2050"

выберите * из теста 1


Рейтинг:
0

Richard Deeming

Вы можете сделать это с помощью одного запроса:

UPDATE
    AddMember
SET
    Status = 'Expired'
WHERE
    Subscription_Expire < GetDate()
;

Вы являются хранение ваших дат в виде одним из типов[^], а не как струны, верно? Если нет, сначала исправьте это, прежде чем столкнетесь с серьезными проблемами, связанными с датами, хранящимися в виде строк.

NB: Ваше приложение должно никогда подключитесь к базе данных как sa Это неограниченный пользователь, который может быть использован для захвата вашего сервера и, возможно, вашей сети. Создайте конкретного пользователя, который имеет только те привилегии, которые необходимы вашему приложению, или используйте проверку подлинности Windows.

// Using Windows authentication:
const string constring = "Data Source=LENOVO-PC\\SUMIT;Initial Catalog=Ngo_Mgmt;Trusted_Connection=True;"; 

const string query = @"UPDATE AddMember SET Status = 'Expired' WHERE Subscription_Expire < GetDate();";

using (var connection = new SqlConnection(constring))
using (var command = new SqlCommand(query, connection))
{
    connection.Open();
    command.ExecuteNonQuery();
}


Member 12852119

что такое GetDate()
ли это сделать сейчас
как это не работает

Richard Deeming

Это встроенная функция SQL:
https://msdn.microsoft.com/en-us/library/ms188383.aspx[^]

Определите "не работает".