Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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-сайт: www.vbnet.ru
 Профиль | | #2
Добавлено: 17.06.05 05:33
Насчет пустых значений: проверьте свойства AllowNull у колонок.

Ответить

Номер ответа: 3
Автор ответа:
 shadow



Вопросов: 11
Ответов: 28
 Профиль | | #3 Добавлено: 17.06.05 12:34
Не понял :( Может я не совсем ясно объяснил. Поле в базе не есть обязательным. То есть Null может быть, но когда я пытаюсь записать пустое значение в DatiTime - ошибка! И как быть с фоткой?

Ответить

Номер ответа: 4
Автор ответа:
 ⊗WaX⊗



Вопросов: 26
Ответов: 325
 Web-сайт: sapfir.cift.ru
 Профиль | | #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-сайт: www.vbnet.ru
 Профиль | | #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-сайт: www.vbnet.ru
 Профиль | | #8
Добавлено: 18.06.05 14:11
Если пустой, то значение параметра ставить DBNull.Value или Nothing - что-то из этих двух точно поможет.

Ответить

Номер ответа: 9
Автор ответа:
 ⊗WaX⊗



Вопросов: 26
Ответов: 325
 Web-сайт: sapfir.cift.ru
 Профиль | | #9
Добавлено: 18.06.05 23:12
если требуется вставить NULL если textbox пустой то используй что-то типа

IIF(txtDate.text="",Nothing,txtDate.text)

Ответить

Номер ответа: 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-сайт: www.vbnet.ru
 Профиль | | #11
Добавлено: 19.06.05 08:40
2 Artyom: Я экспериментов не проводил... Но, ИМХО, Эплман писал, что оба значения вычислялись в VB6, а в .NET вычисляется все как надо.
Сейчас испробую :)

Ответить

Номер ответа: 12
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #12
Добавлено: 19.06.05 08:46
Ан нет, ты прав.

Module mdlMain

    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
Called GetSomeValue

Ответить

Номер ответа: 13
Автор ответа:
 shadow



Вопросов: 11
Ответов: 28
 Профиль | | #13 Добавлено: 21.06.05 17:26
Всем пасиб. Работает как писал Павел.
DBNull.Value

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам