Tech Articles


NULL Handling in C# vs. PowerScript/SQL


C# handles NULL quite different than PowerScript and SQL.
Same code in PowerScript and C# may have different outcome.

 

 

Welcome to a set of examples showing you how C# handles NULL different than PowerScript.
In fact so different that same code can have completely different outcome.

 

Example 1 : Boolean Data Types

C# by default defines the Boolean data type without NULL.
You can opt-in NULL using the nullable operator (question mark).

  PowerScript C# C#
Data type Boolean bool bool?
Possible values true, false, null true, false true, false, null

 

Example 2 : Conditional Expressions

C# evaluates conditional expressions to its not-NULL Boolean type.
Conditional expressions in C# therefore often have different value than in PowerScript.
Adding null to the Boolean data type has no impact.

PowerScript Syntax Boolean result
  vs.   C# Syntax bool result
bool? result
result = (null > 42) null   result = (null > 42) false false
result = (null <> 42) null   result = (null != 42) true true
result = (null = null) null   result = (null == null) true true
result = (null <> null) null   result = (null != null) false false

 

Example 3 : Equality in IF, DO, and WHILE statements

Check for equality in IF, DO, and WHILE statements has different behavior in C# when comparing to NULL values.

 Name1   Name2  PowerScript C#
   
if (Name1 = Name2) then
   result = "NORTH"
else
   result = "South"
end if
if (Name1 == Name2)
   result = "NORTH";
else
   result = "South";

null null result = "South" result = "NORTH"
null "Mick" result = "South" result = "South"

 

Example 4 : Inequality in IF, DO, and WHILE statements

Similar differences exist when checking for inequality.

 

 Name1   Name2  PowerScript C#
   
if (Name1 <> Name2) then
   result = "NORTH"
else
   result = "South"
end if​
if (Name1 != Name2)
   result = "NORTH";
else
   result = "South";

null null result = "South" result = "South"
null "Mick" result = "South" result = "NORTH"

 

Example 5 : Check for NULL

Syntax for NULL is very different in C# though easy to read and type.

Check PowerScript C#
name IS NULL
if IsNull(name) then ...
if (name == null) ...
name IS NOT NULL
if not IsNull(name) then ...​
if (name != null) ...

 


Conclusion 

"Mind your step!" as you cross between PowerScript + SQL on one side and C# on the other side!

NULL handling is so different in C# that same code sometimes results in completely different outcomes.
Notice in DO and WHILE loops, difference may result in endless loops!

Comments (0)
There are no comments posted here yet

Find Articles by Tag

ODBC Windows 10 Icons CI/CD Elevate Conference C# TFS Database Connection SVN License UI Themes PowerBuilder Menu WinAPI External Functions NativePDF Debugging API Authentication PFC Encoding Branch & Merge Automated Testing PostgreSQL ODBC driver Class Import JSON SnapDevelop DLL Mobile Icon Script ActiveX Application OAuth 2.0 COM Testing SQL REST Service Stored Procedure CoderObject Git PBDOM PBNI Export SOAP PBVM Syntax JSON Sort Data Performance Text Oracle Repository PowerServer Web DragDrop TLS/SSL Graph iOS Web API Deployment SQL Server .NET DataStore PDF WebBrowser PowerServer Mobile Excel Open Source GhostScript Validation UI Modernization PDFlib Window Linux OS Installation OLE Event Handler InfoMaker OrcaScript DataWindow Configuration PowerBuilder (Appeon) Filter Azure PowerBuilder Compiler MessageBox Interface XML Windows OS Database Table Data Export JSON SDK DataWindow JSON Visual Studio Array Messagging DevOps 64-bit File Outlook SqlExecutor SqlModelMapper TreeView Jenkins Model Database Profile Charts Debug RibbonBar Builder IDE Migration .NET Assembly Platform Encryption UI Event Database Painter Debugger Android JSONParser DataType Expression Database Table Schema Resize Source Control RESTClient OAuth Variable Authorization Web Service Proxy Database Table Error Source Code Database Object PowerScript (PS) PostgreSQL Bug Trial Transaction Design HTTPClient CrypterObject RichTextEdit Control TortoiseGit Event Handling BLOB Import SnapObjects JSONGenerator Database .NET Std Framework 32-bit RibbonBar