not icomparable?

This topic contains 0 replies, has 1 voice, and was last updated by  Forums Archives 5 years, 7 months ago.

  • Author
    Posts
  • #5340

    by Lembasts at 2012-12-11 17:59:09

    Greetings,
    I have a script that pulls data from a SQL database.
    One of the properties is defined as an integer when I do a GM.
    I can use the -eq operator, but when I use -lt or -gt I get an error :

    Cannot compare "" because it is not IComparable.

    What on earth does this mean please?

    Ignore me......its because the field does not contain a number.
    Interesting though, when I display it, it looks blank but it does not equal "" and does not equal $null. The length of the field is 1. I wonder what is in this field? I notice this happens with all SQL fields that are supposedly null.

    by nohandle at 2012-12-12 02:05:25

    [quote="Lembasts"]Cannot compare "" because it is not IComparable.[/quote]
    I means it does not implement this interface I suppose:
    http://msdn.microsoft.com/en-us/library ... rable.aspx

    [quote="Lembasts"]Ignore me......its because the field does not contain a number. [/quote]
    What is the exact type of the value?
    ($variable.property).GetType().fullname
    or the gm way.

    by Lembasts at 2012-12-13 14:49:58

    The gm shows the variable is an integer.
    The exact type of the value is "System.DBNull".
    So how can I test for that type of null value in an if statement?

    by nohandle at 2012-12-13 15:06:16

    $variable -is [System.DBNull] I think.

    by Lembasts at 2012-12-13 16:18:48

    [quote="nohandle"]$variable -is [System.DBNull] I think.[/quote]

    I got a false result when i ran the above.

    by nohandle at 2012-12-14 00:52:03

    to comply with the syntax of the GetType example the previous one should read:
    $variable.property -is [System.DBNull]
    Did you specified the property when you tried it? I should have described it more precisely the first time, sorry.

    by nohandle at 2012-12-14 01:16:26

    $dbNull= [System.DBNull]]unfortuntely unlike normal null dbNull results in True when casted to bool
    just like most of the others values does (0, $null and of course False does not)
    so you can't use it in condition directly to learn if the variable has value
    that is not dbNull.
    [bool]$null
    [bool]$dbNull
    False
    True
    to check if the value is dbNull you have to check if it is of the dbNull type$dbNull -is [System.DBNull]you can also use the type without the System because it is loaded by default$dbNull -is [DBNull]True
    True

    by Lembasts at 2012-12-17 13:11:30

    When i run this:
    $sqlqr[0].lastmessagestateid.gettype().fullname
    The answer is System.DBNull.
    When I then run this:
    $sqlqr[0].lastmessagestateid.gettype().fullname -is [DBNull]
    the answer is false.

    by nohandle at 2012-12-18 03:14:36

    [quote="Lembasts"]$sqlqr[0].lastmessagestateid.gettype().fullname [/quote]
    this tells you that the type of the original item is DBNull but it outputs the answer as (type) string so if you do [quote="Lembasts"]$sqlqr[0].lastmessagestateid.gettype().fullname -is [DBNull][/quote] you ask if the answer returned is of type dbNull which obvously is not.
    You have to ask if the original item is of type dbNull: $sqlqr[0].lastmessagestateid -is [DBNull]

    by Lembasts at 2012-12-18 12:37:11

    Thats embarrasing 🙂
    Silly me...
    I finally got True with your last statement!

    by nohandle at 2012-12-18 12:56:31

    No it's not, that is learning 🙂

    Please mark the thread as solved (by the solved button) if your issue got solved.

You must be logged in to reply to this topic.