Sunil.yadava09 Ответов: 2

Строка не была распознана как допустимая Дата-Время.


Мой запрос - это когда я создал веб-настройку своего веб-приложения. А затем запустите его на моем компьютере он работает нормально но когда я вхожу fromdate(ДД/ММ/гггг) и todate(ДД/ММ/гггг) в текстовый а потом отправляете его, тогда он выдает ошибку, что строка не была распознана как допустимая значение datetime.

Я хочу ввести формат даты, например ДД/ММ/гггг в textbox и сохранить гггг-ММ-ДД в базе данных.

Страница ошибки показана ниже.


Ошибка сервера в приложении '/DT'.
--------------------------------------------------------------------------------

Строка не была распознана как допустимая Дата-Время.
Описание: необработанное исключение возникло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Exception Details: System.FormatException: String was not recognized as a valid DateTime.

Source Error: 


Line 23:         //DateTime dt1 = Convert.ToDateTime(TextBox1.Text.Trim());
Line 24:         //DateTime dt2 = Convert.ToDateTime(TextBox2.Text.Trim());
Line 25:         string dt1 = Convert.ToDateTime(TextBox1.Text.Trim()).ToString();
Line 26:         string dt2 = Convert.ToDateTime(TextBox2.Text.Trim()).ToString();
Line 27:         SqlConnection conn = new SqlConnection("Data Source=MAX9;Initial Catalog=Leave;User ID=sa;pwd=;");
 

Source File: c:\Inetpub\wwwroot\DT\Default2.aspx.cs    Line: 25 

Stack Trace: 


[FormatException: String was not recognized as a valid DateTime.]
   System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles) +2838082
   System.Convert.ToDateTime(String value) +98
   Default2.Button1_Click(Object sender, EventArgs e) in c:\Inetpub\wwwroot\DT\Default2.aspx.cs:25
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565

 


--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.3615; ASP.NET Version:2.0.50727.3618 


Исходный код и хранимая процедура, которые я использовал на кнопке отправки
protected void Button1_Click(object sender, EventArgs e)
{
        
        string dt1 =Convert.ToDateTime(TextBox1.Text.Trim()).ToString();
        string dt2 =Convert.ToDateTime(TextBox2.Text.Trim()).ToString();
        SqlConnection conn = new SqlConnection("Data Source=MAX9;Initial Catalog=Leave;User ID=sa;pwd=;");
        SqlCommand cmd = new SqlCommand("insert_testtable", conn);
        conn.Open();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@FromDate", SqlDbType.DateTime).Value = dt1;
        cmd.Parameters.Add("@ToDate", SqlDbType.DateTime).Value = dt2;
      

        try
        {
            cmd.ExecuteNonQuery();
            lblMessage.Text = "Record inserted successfully";
        }
        catch (Exception ex)
        {
            throw ex;
        }
        conn.Close();


         }
}


хранимая процедура
CREATE PROCEDURE [dbo].[insert_testtable]
@FromDate datetime,
@ToDate datetime
 AS
insert into testtable values (@FromDate,@ToDate)
GO


Пожалуйста, решите мой вопрос как можно скорее. Заранее спасибо.

2 Ответов

Рейтинг:
5

Al-Farooque Shubho

Используйте следующий код:

string format = "dd/MM/yyyy"; 
DateTime dt = DateTime.ParseExact(dateString, format, provider);


Если вы ожидаете, что пользователь будет вводить данные в формате "MM/dd/yyyy", вам нужно использовать следующий код:

string format = "MM/dd/yyyy"; 
DateTime dt = DateTime.ParseExact(dateString, format, provider);


Вам не нужно беспокоиться о том, в каком формате DateTime объект сохраняется в базе данных до тех пор, пока только ваше приложение извлекает его DateTime данные.


Dalek Dave

хороший ответ.

Member 8569972

Здравствуйте, я использую ваш следующий код, но он дает ошибку для провайдера, поэтому, пожалуйста, не могли бы вы сказать мне, что такое провайдер?

формат строки = "ДД/ММ/гггг";
ДТ датавремя = Датавремя.Метод parseexact(дату, формат, поставщик);

Рейтинг:
13

Estys

вы должны использовать DateTime.Parse(String, IFormatProvider) :
http://msdn.microsoft.com/en-us/library/kc8s65zs.aspx[^]

линия

cmd.Parameters.Add("@FromDate", SqlDbType.DateTime).Value = dt1;


это просто неправильно, не используйте строку, используйте дату и время.

Овации


Dalek Dave

Хорошо Сказано.