Страница: 1 |
Страница: 1 |
Вопрос: Как определить пустое поле?
Добавлено: 16.06.05 11:39
Автор вопроса: shadow
На примере если можно. Есть в базе поля типа Binary и типа DateTime. Проблема следующая: в поле бинари записуется фотка но если ее там нету, при загрузки в датасет - ошибка! И похожая проблема с датой, только наоборот – не дает записать в поле DateTIme пустое значение. Короче, помогайте!!!
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
shadow
Вопросов: 11
Ответов: 28
Профиль | | #1
Добавлено: 16.06.05 11:48
И еще вопрос не втему. Че за ошибка такая: недостаточно сведений ключового поля? Выскакивает когда пытаюсь изменить данные сформированные запросом.
Номер ответа: 2
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #2
Добавлено: 17.06.05 05:33
Насчет пустых значений: проверьте свойства AllowNull у колонок.
Номер ответа: 3
Автор ответа:
shadow
Вопросов: 11
Ответов: 28
Профиль | | #3
Добавлено: 17.06.05 12:34
Не понял Может я не совсем ясно объяснил. Поле в базе не есть обязательным. То есть Null может быть, но когда я пытаюсь записать пустое значение в DatiTime - ошибка! И как быть с фоткой?
Номер ответа: 4
Автор ответа:
⊗WaX⊗
Вопросов: 26
Ответов: 325
Web-сайт:
Профиль | | #4
Добавлено: 18.06.05 01:26
1. Как ты записываешь пустое значение - покажи код
2. Считывай датаридером и проверяй на ISDBNull
Номер ответа: 5
Автор ответа:
shadow
Вопросов: 11
Ответов: 28
Профиль | | #5
Добавлено: 18.06.05 10:53
1. В том то вся и беда что никак. (
data1.insertcommand.parameters("@data).value = textbox1.text, и вот если textbox1.text пустой, выдает сообщению что-то вроде введенный стринг не соотвествует типу DateTime.
2. Конструкция типа:
dim null as dbnull
if foto1.tables("table".rows(0).item(1) is null не фурычит.
'rows(0).item(1)- поле типа Binary
Номер ответа: 6
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #6
Добавлено: 18.06.05 11:25
1. Это логично.. Надо проверять дату на валидность:
If IsDate(TextBox1.Text) Then
...
Else
...
End If
2. А если так?
if foto1.tables("table".rows(0).item(1) is DBNull.Value then
Номер ответа: 7
Автор ответа:
shadow
Вопросов: 11
Ответов: 28
Профиль | | #7
Добавлено: 18.06.05 12:36
1. А что это даст? Если TextBox1.Text пустой условие будет false и прийдем к тому что было! Или нет? Поподробней если можно.
2. Пасиб. Попробую.
Номер ответа: 8
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #8
Добавлено: 18.06.05 14:11
Если пустой, то значение параметра ставить DBNull.Value или Nothing - что-то из этих двух точно поможет.
Номер ответа: 9
Автор ответа:
⊗WaX⊗
Вопросов: 26
Ответов: 325
Web-сайт:
Профиль | | #9
Добавлено: 18.06.05 23:12
если требуется вставить NULL если textbox пустой то используй что-то типа
Номер ответа: 10
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #10
Добавлено: 19.06.05 00:01
> IIF(txtDate.text="",Nothing,txtDate.text)
Не советую использовать функцию IIF.
Мною было замечено ее не совсем адекватное поведение, в частности, я
заметил, что она вычисляет оба значение, как для True, так и для False, что
в некоторых случаях может привести к фатальным последствиям, например, этот
код у меня вызывал проблемы:
strResult = IIf(Obj IsNot Nothing, Obj.ToString, ""
при выполнении, если Obj - это Nothing, возникает NullReferenceException
С теоретической стороны это, конечно понятно - значение Obj.Tostring
передается в функцию и вычисляется до того, как оно попадет в функцию, но
вот с логической стороны - как-то не совсем правильно.
Поэтому советую использовать для таких случаев либо блок If, либо написать
отдельную процедуру типа такой:
Private Shared Function GetString(ByVal mObj As Object) As String
If mObj IsNot Nothing Then
Return mObj.ToString
Else
Return ""
End If
End Function
Номер ответа: 11
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #11
Добавлено: 19.06.05 08:40
2 Artyom: Я экспериментов не проводил... Но, ИМХО, Эплман писал, что оба значения вычислялись в VB6, а в .NET вычисляется все как надо.
Сейчас испробую
Номер ответа: 12
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #12
Добавлено: 19.06.05 08:46
Ан нет, ты прав.
Sub Main()
Dim s As String = IIf(True, GetSomeValue, GetSomeValue)
Console.ReadLine()
End Sub
Private Function GetSomeValue() As String
Console.WriteLine("Called GetSomeValue"
Return "Vasya Pupkin"
End Function
End Module
Выводит:
Called GetSomeValue
Номер ответа: 13
Автор ответа:
shadow
Вопросов: 11
Ответов: 28
Профиль | | #13
Добавлено: 21.06.05 17:26
Всем пасиб. Работает как писал Павел.
DBNull.Value