ADI@345 Ответов: 4

Как сравнить текущую дату с существующей датой базы данных в C#


Я не могу сравнить текущую дату с существующей датой базы данных в c#.

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

<pre>
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

        string userid = GVmydsr.DataKeys[e.RowIndex].Value.ToString();
        GridViewRow row = (GridViewRow)GVmydsr.Rows[e.RowIndex];

        //string date = GVmydsr.Rows[e.RowIndex].Cells[1].Text;
        Label date = (Label)row.FindControl("lblcurrentdate");
        
        

        GVmydsr.EditIndex = -1;

        DropDownList ddl1 = GVmydsr.Rows[e.RowIndex].FindControl("ddlclient") as DropDownList;
        TextBox txt1 = GVmydsr.Rows[e.RowIndex].FindControl("txtarea") as TextBox;
        TextBox txt2 = GVmydsr.Rows[e.RowIndex].FindControl("txtcmpnyname") as TextBox;
        TextBox txt3 = GVmydsr.Rows[e.RowIndex].FindControl("txtcname") as TextBox;
        TextBox txt4 = GVmydsr.Rows[e.RowIndex].FindControl("txtmobile") as TextBox;
        TextBox txt5 = GVmydsr.Rows[e.RowIndex].FindControl("txtemail") as TextBox;
        TextBox txt6 = GVmydsr.Rows[e.RowIndex].FindControl("txtaddr") as TextBox;
        TextBox txt7 = GVmydsr.Rows[e.RowIndex].FindControl("txtland") as TextBox;
        TextBox txt8 = GVmydsr.Rows[e.RowIndex].FindControl("txtpresence") as TextBox;
        DropDownList ddl2 = GVmydsr.Rows[e.RowIndex].FindControl("ddlstatus") as DropDownList;
        DropDownList ddl3 = GVmydsr.Rows[e.RowIndex].FindControl("ddlresult") as DropDownList;
        TextBox txt9 = GVmydsr.Rows[e.RowIndex].FindControl("txtcomment") as TextBox;

        string day = DateTime.Today.ToShortDateString().ToString();
        if (date.ToString() == day.ToString())
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("update [dsr_data] set client_type='" + ddl1.Text + "' ,area='" + txt1.Text + "',company_name='" + txt2.Text + "',client_name='" + txt3.Text + "',mobile='" + txt4.Text + "',email='" + txt5.Text + "',address_name='" + txt6.Text + "',landmark='" + txt7.Text + "',curr_presence_appoint='" + txt8.Text + "',status_type='" + ddl2.Text + "', result='" + ddl3.Text + "', comment='" + txt9.Text + "' where id='" + userid + "'", con);
            cmd.ExecuteNonQuery();
            con.Close();

            gvbind();
        }
    }

Karthik_Mahalingam

какова ценность, которую вы получаете

 Label date = (Label)row.FindControl("lblcurrentdate");

ADI@345

"01-04-2018 00:00:00"

Karthik_Mahalingam

использовать  Ответить  кнопка, чтобы отправить комментарии/запрос пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

ADI@345

окого

Karthik_Mahalingam

выложил решение.

4 Ответов

Рейтинг:
4

Karthik_Mahalingam

от комментариев:
"01-04-2018 00:00:00"

string date =  "01-04-2018 00:00:00";
          string day = DateTime.Today.ToString("MM-dd-yyyy 00:00:00");
          if (date == day)
          {

          }


Примечание: Конкатенация строки sql-запроса-это уязвимый к SQL-инъекция[^] атаки
всегда использовать Параметризованные запросы для предотвращения атак SQL-инъекций в SQL Server[^]


ADI@345

сэр, я получил тот же результат по дате и Дню, но даже если оба они одинаковы, он не входит в цикл..

Karthik_Mahalingam

пробовать

string dbDateString = "01-04-2018 00:00:00";
            DateTime date1 = DateTime.ParseExact(dbDateString.Split(' ')[0], "MM-dd-yyyy", null);
            string day = DateTime.Today.ToString("MM-dd-yyyy");
            string dateDB = date1.ToString("MM-dd-yyyy");
            if (dateDB == day)
            {

            }

Karthik_Mahalingam

попробуйте обрезать значения

ADI@345

Дата метки = строка (метка).FindControl("lblcurrentdate");
я использую метку, чтобы получить дату из базы данных.., а затем сравниваю системную дату с датой базы данных из метки..

ADI@345

Строка не была распознана как допустимая Дата-Время.
//дата строка = GVmydsr.Ряды[электронный.Параметр rowindex].Клетки[1].Текст;
Дата метки = строка (метка).FindControl("lblcurrentdate");
строка cdate = дата.Метод toString();
Дата1 датавремя = Датавремя.ParseExact(cdate.Split(' ')[0], "MM-dd-yyyy", null);
строка dateDB = date1.ToString("ММ-ДД-гггг");

строки день = дата и время.Сегодня.ToString("ММ-ДД-гггг");

if (dateDB == день)
{
////
}

Karthik_Mahalingam

string cdate = date.Text.ToString();

ADI@345

получение ошибки в этой строке
Дата1 датавремя = Датавремя.ParseExact(cdate.Split(' ')[0], "MM-dd-yyyy", null);
Строка не была распознана как допустимая Дата-Время.

Karthik_Mahalingam

какая в этом ценность cdate

ADI@345

я решаю эту ошибку, но не иду внутрь цикла.. Я посылаю вам свой код..
SqlConnection con = новый SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].Параметр connectionString);

строка имя пользователя = GVmydsr.DataKeys[электронный.Параметр rowindex].Значение.Метод toString();
GridViewRow row = (GridViewRow)GVmydsr.Rows[e.Параметр rowindex];

//дата строка = GVmydsr.Ряды[электронный.Параметр rowindex].Клетки[1].Текст;
Дата метки = строка (метка).FindControl("lblcurrentdate");

строка cdate = date.Text.Метод toString();
Дата1 датавремя = Датавремя.ParseExact(cdate, "MM-dd-yyyy 00:00:00", null);
строка dt1 = date1.Метод toString();


GVmydsr.EditIndex = -1;



строки день = дата и время.Сегодня.ToString("ММ-ДД-гггг");
если (dt1 == день)
{
против.Открыть();
//
УМК.Метод executenonquery();
против.Закрывать();

gvbind();
}

Karthik_Mahalingam

хорошо используй

string day = DateTime.Today.ToString("MM-dd-yyyy 00:00:00");

ADI@345

Я получаю это :
dt1 ="04-01-2018 00:00:00"
dt2 ="01-04-2018 00:00:00"


строка имя пользователя = GVmydsr.DataKeys[электронный.Параметр rowindex].Значение.Метод toString();
GridViewRow row = (GridViewRow)GVmydsr.Rows[e.Параметр rowindex];
Дата метки = строка (метка).FindControl("lblcurrentdate");

строка cdate = date.Text.Метод toString();
Дата1 датавремя = Датавремя.ParseExact(cdate, "MM-dd-yyyy 00:00:00", null);
строка dt1 = date1.Метод toString();



строка dt2 = DateTime.Сегодня.ToString("MM-dd-yyyy 00:00:00");
если (dt1 == dt2)
{
//


}

Karthik_Mahalingam

использовать

   string dt1 = date1.ToString("MM-dd-yyyy 00:00:00");

ADI@345

наконец-то он переместился внутрь петли, большое спасибо за вашу помощь..

Karthik_Mahalingam

добро пожаловать

Рейтинг:
2

Bryian Tan

Вы можете попробовать что-то вроде

string day = DateTime.Today.ToString("MM/dd/yyyy");

if (date.ToString("MM/dd/yyyy") == day)
{
    //do something
}

Кстати, попробуйте использовать параметризованный запрос, если это возможно, чтобы избежать потенциальной SQL-инъекции. Вот вам пример Использование параметризованных запросов для предотвращения атак SQL-инъекций в SQL Server[^]


Рейтинг:
2

Vincent Maverick Durano

Во-первых, возьмите за привычку помещать объекты, которые потребляют ресурсы, такие как SqlConnection, SqlCommand и SqlDataAdapter, в один объект. [^]использование оператора для обеспечения того, чтобы объекты были правильно утилизированы и закрыты после их использования.

Во-вторых, "не добавляйте" значения полей ввода в SQL-запрос, так как это может привести к атаке SQL-инъекций. Вместо этого используйте параметризованный запрос.Видеть: Защитите свои данные: предотвратите SQL-инъекцию[^]

А теперь вернемся к вашему первоначальному вопросу. Сравнение Строковой даты очень прямолинейно, как это:

if (Convert.ToDateTime(date).Equals(DateTime.Now())){
  //do stuff
}


Вам нужно сравнить а DateTime объекта и не string Вам просто нужно убедиться, что значение даты из вашей метки является допустимым datetime, иначе используйте DateTime.TryParse() вместо Convert.ToDateTime()