2016-01-28 2 views
0

Я получаю дату с моего сервера sql, который составляет 2016-01-06 (год-месяц-день) в строку. Формат sql - дата. Вместо того, чтобы получать только 2016-01-06, я получу 1/6/2016/(месяц/день/год) 12:00:00 AM. Теперь то, что я пытаюсь сделать, это удалить время и преобразовать дату в формате dd/M/yyyy. Я следил за всем примером в других вопросах, но я получу «Строка не была признана действительной DateTime« Есть ли какие-либо шаги, которые я пропустил, или я делаю это неправильно.Строка не была признана действительной DateTime [Удалить время с DateTime]

protected void btnUser_Click(object sender, EventArgs e) 
     { 
      { 
       string Name = cmbName.Text; 
       string start = ""; 

       SqlConnection myConn = new SqlConnection("Data Source=localhost;" + "Initial Catalog=IBBTS_DB; Integrated Security =SSPI"); 

        SqlCommand retrieveStart_DateCmd = new SqlCommand("SELECT startDate FROM testSet where TS_ID = 121 ;", myConn); 
        SqlDataReader reader6 = retrieveStart_DateCmd.ExecuteReader(); 
        while (reader6.Read()) 
        { 
         start = (reader6.GetValue(0).ToString()); 
        } 
        reader6.Close(); 

        DateTime dateTime = DateTime.ParseExact(start, "dd/MM/yyyy", CultureInfo.InvariantCulture); 


      } 
     } 
+0

почему бы не попробовать использовать функцию Convert. –

ответ

3

SQL Сохраняет даты типа данных в стандартном формате для SQL. Однако при получении типа данных datetime из SQL результат datetime будет преобразован в структуру DateTime на C#.

Как полученное значение IS a DateTime объект, который вам не нужно преобразовывать в строку, затем проанализируйте его. Это удваивает работу по конверсии для получения того, что datetime.

Попробуйте этот пример.

protected void btnUser_Click(object sender, EventArgs e) 
    { 
     { 
      string Name = cmbName.Text; 
      DateTime start = default(DateTime); 

      SqlConnection myConn = new SqlConnection("Data Source=localhost;" + "Initial Catalog=IBBTS_DB; Integrated Security =SSPI"); 

       SqlCommand retrieveStart_DateCmd = new SqlCommand("SELECT startDate FROM testSet where TS_ID = 121 ;", myConn); 
       SqlDataReader reader6 = retrieveStart_DateCmd.ExecuteReader(); 
       while (reader6.Read()) 
       { 
        start = (DateTime)reader6[0]; 
       } 
       reader6.Close(); 
       string myFormattedString = start.ToString("dd/MM/yyyy"); 
     } 
    } 
0

Избегайте использования ToString() - вы dumbing вниз тип, который SQL Server отправляет вам. Вы должны иметь возможность получить значение, используя GetDateTime(0) вместо GateValue(0). Это позволит вам легче манипулировать значением.

C# не поставляется со встроенным Date типами, только DateTime. Следовательно, это то, что вам представлено. Получив DateTime, вы можете использовать обычные операции форматирования для форматирования по своему усмотрению.

1

Поскольку вы знаете, что поле будет датой, и это просто одно поле, можете ли вы просто использовать GetDateTime?

DateTime dateTime = Reader6.GetDateTime(0) 

Это может позволить вам пропускать преобразования строк. Очевидно, что сначала проверьте dbNull, если это возможно.

0

Попробуйте назначить дату в следующем формате:

protected void btnUser_Click(object sender, EventArgs e) 
{ 
     string Name = cmbName.Text, start = string.empty; 

     SqlConnection myConn = new SqlConnection("Data Source=localhost;" + "Initial Catalog=IBBTS_DB; Integrated Security =SSPI"); 

     SqlCommand retrieveStart_DateCmd = new SqlCommand("SELECT startDate FROM testSet where TS_ID = 121 ;", myConn); 
     SqlDataReader reader6 = retrieveStart_DateCmd.ExecuteReader(); 

     while (reader6.Read()) 
     { 
       start = (reader6.GetValue(0).ToString()); 
     } 
     reader6.Close(); 

     DateTime dateTime = DateTime.ParseExact(start, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);//DateTime.ParseExact(start, "dd/MM/yyyy", CultureInfo.InvariantCulture); 
} 

И в файле Web.config под добавить это

<configuration> 
    <system.web> 
     <globalization culture="en-US" uiCulture="en-US" /> 
    </system.web> 

Смежные вопросы