Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> внесение null в поле времени 
:(
    Опции темы
Alex_79
Дата 30.5.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.5.2007

Репутация: нет
Всего: нет



приветsmile
возникла такая проблема необходимо внести в поле которое имеет формат-время,пустое значение
Для этого ничего не прописываю в textBox1(в котором нужно указать дату), но мне выдается ошибка

Additional information: Failed to convert parameter value from a String to a DateTime.

что делать?

СУБД:Oracle 10g(XE)
Среда разработки: VS2005

Заранее благодарен за  помощь)

Это сообщение отредактировал(а) Alex_79 - 30.5.2008, 11:47
PM MAIL   Вверх
Walker
Дата 30.5.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: нет
Всего: 16



Вы ответы-то хоть читаете?  smile 
Использование следующего типа также правомерно
Код

DateTime?



--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
Alex_79
Дата 30.5.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.5.2007

Репутация: нет
Всего: нет



Walker,
Error    2    Argument '7': cannot convert from 'System.DateTime?' to 'string'
DateTime? m=null-вот это использовал
 


PM MAIL   Вверх
Walker
Дата 30.5.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: нет
Всего: 16



 smile Вы что сделать пытаетесь?
Покажите код.
Если текстовое поле пустое - в базу пишите null, как есть, без преобразования типов.
Если читаете из Базы - разрешите приём null, и, если оно встретится, просто никуда его не выводите и не к чему не приводите.

Это сообщение отредактировал(а) Walker - 30.5.2008, 12:11


--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
Alex_79
Дата 30.5.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.5.2007

Репутация: нет
Всего: нет



Код

decimal? d = null;
            DateTime? m = null;
           
            if (textBox3.Text != "")
            {
                if (textBox8.Text == "")
                {
                 
                    DataSet1TableAdapters.EkzempTableAdapter adapter1 = new Base.DataSet1TableAdapters.EkzempTableAdapter();

                    adapter1.UpdateEkzempl(Convert.ToDecimal(comboBox1.SelectedValue.ToString()), Convert.ToDecimal(textBox1.Text), textBox7.Text, Convert.ToDecimal(comboBox2.SelectedValue.ToString()), Convert.ToDecimal(comboBox3.SelectedValue.ToString()), Convert.ToDecimal(textBox2.Text), m, Convert.ToDecimal(textBox3.Text), id_cen_up);
                }
            }


Добавлено @ 12:10
textBox8 -это дата[code=csharp]



Это сообщение отредактировал(а) Alex_79 - 30.5.2008, 12:16
PM MAIL   Вверх
Walker
Дата 30.5.2008, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: нет
Всего: 16



Отредактируйте, Пожалуйста, сообщение. Выделите код, нажмите сверху кнопку Код - выберите C#. Улучшится читабельность, - поможем Вам разобраться.
Код надо реорганизовать. Подождите немного.

Это сообщение отредактировал(а) Walker - 30.5.2008, 12:14


--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
Alex_79
Дата 30.5.2008, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.5.2007

Репутация: нет
Всего: нет



Walker, так если нет ничего  в textBox8 , он мне потом выдает ошибку что не возможно конвертировать String в DataTime

PM MAIL   Вверх
Walker
Дата 30.5.2008, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: нет
Всего: 16



По Вашему случаю:
Если Вы пишете в самом условии
Код

if (textBox3.Text != "")
{
                if (textBox8.Text == "")

то зачем в теле условной конструкции ссылатся на содержимое этих текстбоксов? Почему сразу не отправить null?
На будущее: вместо
Код

textBox8.Text == ""

используйте
Код

String.IsNullOrEmpty(textBox8.Text)

Его сигнатура
Код

public static bool IsNullOrEmpty(string value)
{
    if (value != null)
    {
        return (value.Length == 0);
    }
    return true;
}

Почувствуйте разницу...


Это сообщение отредактировал(а) Walker - 30.5.2008, 12:25


--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
Alex_79
Дата 30.5.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.5.2007

Репутация: нет
Всего: нет



если ставлю просто null то выдает ошибку
Additional information: Failed to convert parameter value from a String to a DateTime.
PM MAIL   Вверх
Walker
Дата 30.5.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: нет
Всего: 16



Код

decimal? d = null;
            DateTime? m = null;
           
            if (textBox3.Text != "")
            {
                if (textBox8.Text == "")
                {
                 
                    DataSet1TableAdapters.EkzempTableAdapter adapter1 = new Base.DataSet1TableAdapters.EkzempTableAdapter();
                    adapter1.UpdateEkzempl(Convert.ToDecimal(comboBox1.SelectedValue.ToString()), Convert.ToDecimal(textBox1.Text), textBox7.Text, Convert.ToDecimal(comboBox2.SelectedValue.ToString()), Convert.ToDecimal(comboBox3.SelectedValue.ToString()), Convert.ToDecimal(textBox2.Text), m, Convert.ToDecimal(textBox3.Text), id_cen_up);
                }
            }

На какой строке вылетает ошибка? Гда происходит попытка преобразования в DateTime?


--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
Alex_79
Дата 30.5.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.5.2007

Репутация: нет
Всего: нет



Код

adapter1.UpdateEkzempl(Convert.ToDecimal(comboBox1.SelectedValue.ToString()), Convert.ToDecimal(textBox1.Text), textBox7.Text, Convert.ToDecimal(comboBox2.SelectedValue.ToString()), Convert.ToDecimal(comboBox3.SelectedValue.ToString()), Convert.ToDecimal(textBox2.Text), m, Convert.ToDecimal(textBox3.Text), id_cen_up);

                }
            }

Добавлено через 36 секунд
на m вылетает
PM MAIL   Вверх
Walker
Дата 30.5.2008, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: нет
Всего: 16



Цитата

на m вылетает 

Этого я не понял.
Цитата

textBox8 -это дата

Где в приведённой выше строке textBox8, null, etc связанное с датой?


--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
Alex_79
Дата 30.5.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.5.2007

Репутация: нет
Всего: нет



кстати я обновляю данные

Добавлено через 1 минуту и 59 секунд
если textBox8 пуст, то я вставляю не его значение, а m
PM MAIL   Вверх
Magnifico
Дата 30.5.2008, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 2
Всего: 17



по примеру между комментариями
Код

DataRow r = ds.Tables["Customer"].NewRow();
            r.BeginEdit();
            r[0] = Convert.ToInt32(CustNoTextBox.Text);
            r[1] = CompanyTextBox.Text;
            r[2] = AddrTextBox.Text;  
            DateTime date;
//--------------------------------------------------------------------------------------------//
            if (DateTime.TryParse(DataTextBox.Text.Trim(), out date))
            {
                r[3] = date; 
            }
            else  {
                r[3] = DBNull.Value; 
            }
//-----------------------------------------------------------------------------------------------//
            r.EndEdit();
            ds.Tables["Customer"].Rows.Add(r);




--------------------
Всё  в  порядке   -   спасибо  зарядке  !
PM MAIL   Вверх
Любитель
Дата 30.5.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 1
Всего: 92



Ты null в Convert.ToDecimal передаёшь, а не в сам Update. Так?


--------------------
PM MAIL ICQ Skype   Вверх
Walker
Дата 30.5.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: нет
Всего: 16



В общем, действуйте по следующей схеме.

В Oracle разрешайте типизированному столбцу приём null. Полагаю, это уже сделано.
Если Вам требуется обновлять значения только при пустых полях, отправляйте туда прямо null, без кастинга.
Если Вам требуется обновлять любыми значениями из полей, то
- создайте переменную значимого типа с разрешением null и инициализируйте её null.
- напишите метод с конструкцией try...catch, который будет предпринимать попытку приведения string к значимому типу или используйте TryParse. Если исключение приведения не выбрасывается - записывайте полученное значение. Если же брошено - оставьте исходное значение null.
Записывайте в базу значение переменной.

Удачи!

Ого, как опередили.  smile  

Это сообщение отредактировал(а) Walker - 30.5.2008, 12:52


--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
Alex_79
Дата 30.5.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.5.2007

Репутация: нет
Всего: нет



Любитель, я не над Convert.ToDecimal , мне нужно в базу внести пустое значение (тип-дата)
PM MAIL   Вверх
akizelokro
Дата 30.5.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: нет
Всего: 5



Цитата

String.IsNullOrEmpty(textBox8.Text)

На будущее, используйте не так, а 
Код

textBox8.Text.Trim().IsNullOrEmpty()

и вообще всегда используйте Trim() для удаления возможных краевых пробелов. Во избежании ошибок. Это принято в веб-программировании, предполагается желательным и в программировании с использованием WinForms.

Есть два варианта решения проблемы null-значений в DateTime полях.
Первая, - условиться, что для них будеть использоваться фактически недостижимое значение. Для MS SQL это '01.01.1910' (если ваша база данных не касается старожилов).
Второй,- когда вы юзаете все-таки null-значения, то указано у Magnifico. Возможно, при этом придется переделать форму UpdateCommand, если указанный у него способ не решает проблему "в лоб".



--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Любитель
Дата 30.5.2008, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 1
Всего: 92



Цитата(akizelokro @  30.5.2008,  13:43 Найти цитируемый пост)
На будущее, используйте не так, а 

IsNullOrEmpty - это статик метод класса string.


--------------------
PM MAIL ICQ Skype   Вверх
akizelokro
Дата 2.6.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: нет
Всего: 5



Цитата

IsNullOrEmpty - это статик метод класса string. 

Лопухнулся. Спасибо за замечание.  Text.Trim().IsNullOrEmpty() - неточно.


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0958 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.