Member 14075800 Ответов: 2

Ошибка преобразования при преобразовании даты и/или времени из символьной строки


Всем доброго дня..
Я пытаюсь вставить/сохранить значение dropdownlist в свою базу данных.
Однако он всегда выходит с ошибкой, которая "преобразование не удалось при преобразовании даты и/или времени из символьной строки..."

Я пробовал такие способы, как обращение.ToDateTime() и DateTime.Parse() в моих кодах, но ошибка все равно возникает.

И да.. тип данных для "classStart" и "classEnd" - это DATETIME.

Заранее спасибо за помощь.

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

Вот мои коды...
protected void Page_Load(object sender, EventArgs e)
    {
        // Set the start time in dropdownlist timedd & timedd2
        DateTime StartTime = DateTime.MinValue.AddHours(8);
        // Set the end time in dropdownlist timedd & timedd2
        DateTime EndTime = DateTime.MinValue.AddDays(1);

        for (var i = StartTime; i <= EndTime; i = i.AddMinutes(30))
        {
            timedd.Items.Add(i.ToShortTimeString());
            timedd2.Items.Add(i.ToShortTimeString());
        }
}

protected void saveSchedule_Click(object sender, EventArgs e)
    {

        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString);
        
        try
        {
            conn.Open();
            string addquery = "INSERT INTO [Schedule] ([className],[classStart],[classEnd],[classDes]) VALUES (@className, @classStart, @classEnd, @classDes)";
            SqlCommand cmd = new SqlCommand(addquery, conn);
            cmd.Parameters.AddWithValue("@className", className.Text); 
            cmd.Parameters.AddWithValue("@classStart", Convert.ToDateTime(timedd.SelectedItem.Value));
            cmd.Parameters.AddWithValue("@classEnd", Convert.ToDateTime(timedd2.SelectedItem.Value));
            cmd.Parameters.AddWithValue("@classDes", classdes.Text);
            
            int rs = cmd.ExecuteNonQuery();
            if (rs == 1)
            {
                result1.Visible = true;
                result1.Text = "Record Has Been Added Successfully !";
                Response.AddHeader("REFRESH", "5; URL = Schedule.aspx");

            }
            else
            {
                result1.Visible = true;
                result1.Text = "Please try again...";
            }

        }
        catch (Exception ex)
        {
            Response.Write("Error: " + ex.ToString());
        }

Richard MacCutchan

Вы пытаетесь обратить в свою веру SelectedItem.Value, который, скорее всего, не является строкой. Попробуйте Text вместо этого собственность.

Member 14075800

Я попробовал. и произошла та же ошибка. В любом случае, все равно большое вам спасибо.

Richard MacCutchan

Извините, мой предыдущий (удаленный) ответ был неправильным, проблема, которую я подозреваю, заключается в моем комментарии выше.

Member 14075800

Ладно, все в порядке. спасибо снова.
Я чувствую себя очень запутанным, так как я пытался использовать точно такой же код в новой веб-форме, он может быть вставлен хорошо без какой-либо ошибки преобразования. Но вернемся к реальной веб-форме, она выходит с ошибкой.. Я действительно понятия не имею об этом, может быть, мне стоит проверить еще раз ... хм...

Richard MacCutchan

Вам нужно перестать гадать и посмотреть, какие именно данные возвращаются из SelectedItem. Пока вы не увидите, что вы пытаетесь преобразовать, вы не решите проблему.

2 Ответов

Рейтинг:
2

OriginalGriff

Начните с использования отладчика, чтобы посмотреть, что именно вы передаете в какое поле.
Определите, какое значение даты / времени и посмотрите на точный формат, в котором вы его передаете, - если это подлинная дата или время, то все в порядке.
Преобразуйте его в значение DateTime с помощью TryParse (или TryParseExact) и передайте это преобразованное значение в SQL вместо "сырого" значения, которое вы читаете из раскрывающегося списка.
Скорее всего, значения в раскрывающемся списке являются строками, и они не имеют формата, который совпадает с датами, настроенными на вашем компьютере SQL Server, поэтому он создает исключение, потому что не может правильно преобразовать его. Передавая значения DateTime, вы устраняете эту проблему.


Member 14075800

Спасибо за предложение, я все еще нахожу способ решить эту проблему.

Рейтинг:
2

Divya Srivastava

Сначала преобразуйте значение в правильный формат

// Place a breakpoint here and see what dateFormat looks like

var classstartFormat = Convert.ToString(timedd.SelectedItem.Value);

// Using the format that you see, use DateTime.ParseExact() to properly read this value into a DateTime object
DateTime classstart= DateTime.ParseExact(classstartFormat,"yyyy-MM-dd", null);

// Set the parameter to the value
cmd.Parameters.AddWithValue("@classStart", classstart);


Member 14075800

Спасибо, я только что попробовал, но он говорит, что "строка не была распознана как допустимая Дата-Время" ...