Powershell и параметры SQL. Если пустая строка, передача DBNull

Да.

Вы кодируете свои инварианты в системе типов Haskell. Затем компилятор принудительно выполнит (например, выполнит проверку типа), чтобы предотвратить компиляцию вашей программы, если инварианты не удерживаются.

Для упорядоченных списков вы могли бы рассмотреть дешевый подход к реализации умного конструктора , который изменяет тип списка при сортировке.

module Sorted (Sorted, sort) where

newtype Sorted a = Sorted { list :: [a] }

sort :: [a] -> Sorted a
sort = Sorted . List.sort

Теперь вы можете написать функции, которые предполагают, что Sorted удерживается, и компилятор предотвратит передачу несортированных вещей этим функциям.

Вы можете пойти намного дальше и закодировать чрезвычайно богатые свойства в систему типов. Примеры:

С практикой, довольно сложные инварианты могут быть применены языком во время компиляции.

Однако существуют ограничения, так как система типов не предназначена для проверки свойств программ. Для тяжелых доказательств рассмотрите проверку моделей или теоремы, доказывающие языки, такие как Coq. Язык Agda - это язык, похожий на Haskell, система типов которого предназначена для доказательства богатых свойств.

7
задан Joey 28 May 2009 в 15:18
поделиться

2 ответа

В PowerShell вы можете рассматривать пустые / пустые строки как логическое.

$x = $null
if ($x) { 'this wont print' }

$x = ""
if ($x) { 'this wont print' }

$x = "blah"
if ($x) { 'this will' }

Итак .... сказав, что вы можете сделать:

$Parameter.Value = $(if ($x) { $x } else { [DBNull]::Value })

Но я ' d, скорее, оберните это функцией, например:

function CatchNull([String]$x) {
   if ($x) { $x } else { [DBNull]::Value }
}
17
ответ дан 6 December 2019 в 07:28
поделиться

Я не знаю о PowerShell , но в C # я бы сделал что-то вроде этого:

if ([string]::IsNullOrEmpty($objUser.Telephone))
{
 $objDbCmd.Parameters["@telephone"].Value = [DBNull]::Value;
}
else
{
 $objDbCmd.Parameters["@telephone"].Value = $objUser.Telephone;
}
6
ответ дан 6 December 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: