Techno- Byte Ответов: 2

Plz для преобразования формата даты и времени


Привет, я столкнулся с проблемой, что я хочу преобразовать формат даты и времени, беря время даты из базы данных и отображая дату в другом формате, который я использовал system.globalization и иметь дело с DateTime.ParseExact но CultureInfo.Инвариантная культура не идентифицирует есть ошибка:
the best overloaded method match for System.DateTime.ParseExact(string, string, System.IFormatProvider)' has some invalid arguments and can not convert from object to string

так что это полный код plz help
void EMPdspunis()
      {
          string dtfrom = "";
          string dtto = "";
          dtfrom = DTPFROM.Value.ToShortDateString();
          dtto = DTPTO.Value.ToShortDateString();
          string mm = DTPFROM.Value.Month.ToString();
          if (mm.Length == 1)
          {

              mm = "0" + mm;
          }
          string dd = DTPFROM.Value.Day.ToString();
          if (dd.Length == 1)
          {
              dd = "0" + dd;

          }
          dtfrom = DTPFROM.Value.Year.ToString() + mm + dd;

          mm = DTPTO.Value.Month.ToString();
          if (mm.Length == 1)
          {
              mm = "0" + mm;
          }
          dd = DTPTO.Value.Day.ToString();
          if (dd.Length == 1)
          {

              dd = "0" + dd;

          }

          dtto = DTPTO.Value.Year.ToString() + mm + dd;

              //string sqltxtEmpNo = "select C_Date,L_UID,C_Time from tEnter where L_UID=" + txtEmpName.Text + "and C_Date between'" + dtfrom + "'and'" + dtto + "'";

              string sql= "SELECT     c_date as [التاريخ],  l_uid as [رقم الموظف], c_Time as [الوقت]  FROM         tEnter WHERE     L_UID = " + txtEmpNo.Text+ " and c_date between '" + dtfrom + "' and '" + dtto+ "'";

              string strconn = "Provider=SQLOLEDB;Data Source=.;user id=sa;Initial Catalog=unis";
              OleDbConnection cn = new OleDbConnection(strconn);
              OleDbDataAdapter da = new OleDbDataAdapter(sql, cn);
              DataSet ds = new System.Data.DataSet();
              da.Fill(ds, "ta");
              if (ds == null)
                  return;


              if (ds.Tables[0].Rows.Count > 0)
              {

                  for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                  {



                      dtEmplogs.Rows.Add();

                      dtEmplogs.Rows[i].Cells[0].Value = ds.Tables[0].Rows[i][0];

                      dtEmplogs.Rows[i].Cells[0].Value = DateTime.ParseExact(ds.Tables[0].Rows[i][0], "yyyyMMdd", CultureInfo.InvariantCulture)("yyyy/MM/dd");
                      dtEmplogs.Rows[i].Cells[1].Value = ds.Tables[0].Rows[i][1];
                      dtEmplogs.Rows[i].Cells[2].Value = txtEmpName.Text;
                      dtEmplogs.Rows[i].Cells[3].Value = ds.Tables[0].Rows[i][2];
                      dtEmplogs.Rows[i].Cells[3].Value = ds.Tables[0].Rows[i][2];



                  }

                  dtEmplogs.DefaultCellStyle.SelectionBackColor = Color.BurlyWood;
              }
      }


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

<pre>  for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        dtEmplogs.Rows.Add();

                        dtEmplogs.Rows[i].Cells[0].Value = ds.Tables[0].Rows[i][0];

                        dtEmplogs.Rows[i].Cells[0].Value = DateTime.ParseExact(ds.Tables[0].Rows[i][0], "yyyyMMdd", CultureInfo.InvariantCulture)("yyyy/MM/dd");
                        dtEmplogs.Rows[i].Cells[1].Value = ds.Tables[0].Rows[i][1];
                        dtEmplogs.Rows[i].Cells[2].Value = txtEmpName.Text;
                        dtEmplogs.Rows[i].Cells[3].Value = ds.Tables[0].Rows[i][2];
                        dtEmplogs.Rows[i].Cells[3].Value = ds.Tables[0].Rows[i][2];

                    

                    }

2 Ответов

Рейтинг:
2

Patrice T

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL Injection-руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL-OWASP[^]


Рейтинг:
1

RickZeeland

Убедитесь, что вы передаете строку DateTime.ParseExact().
Вы должны указать точную строку форматирования для DateTime.Метод parseexact. Вам нужно использовать строку формата, в которой есть буквы, указывающие ParseExact, где читать значения из вашей строки.
См. примеры здесь: [Dotnetperls]