New-SqlClientParameter.ps1



function New-SqlClientParameter() {
<#
    .SYNOPSIS
    Creates a new System.Data.SqlClient.SqlParameter object.
 
    .DESCRIPTION
    By default, the .NET framework has an implementation for SqlClient and
    thus this cmdlet exists to help create new SqlParameter objects.
 
    .PARAMETER ParameterName
    The name of the parameter. The `Name` Parameter is an alias for this one.
 
    .PARAMETER DbType
    The `System.Data.SqlClient.SqlDbType` type for this SQL parameter.
 
    .PARAMETER Value
    The value that will be bound to this parameter.
 
    .PARAMETER Size
    (Optional). Sets the maximum size in bytes for this parameter.
 
    .PARAMETER Scale
    (Optional). Sets the number of decimal places to which the `Value` is resolved
 
    .PARAMETER Precision
    (Optional). Sets the maximum number of digits used to represent the Value.
 
    .EXAMPLE
     $parameter = New-SqlClientParameter "FirstName" "NVarChar" "Nerdy" -Limit 255
 
     .LINK
     https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter(v=vs.110).aspx
 
     .LINK
     https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.sqldbtype(v=vs.110).aspx
#>

    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $true, Position = 1)]
        [Alias("Name")]
        [string] $ParameterName,
        [Parameter(Mandatory = $true, Position = 2)]
        [System.Data.SqlClient.SqlDbType] $DbType,
        [Parameter(Mandatory = $true, Position = 3)]
        [object] $Value,
        [Nullable[int]] $Size = $null,
        [Nullable[byte]] $Precision = $null,
        [Nullable[int]] $Scale = $null 
    )
    [System.Data.SqlClient.SqlDbType]::
    $parameter = New-Object System.Data.SqlClient.SqlParameter 
    $parameter.ParameterName = "@$ParameterName";
    $parameter.SqlDbType = $DbType;
    $parameter.Value = $Value;

    if($Size.HasValue) {
        $parameter.Size = $Size.Value;
    }

    if($Precision.HasValue) {
        $parameter.Size = $Precision.Value;
    }

    if($Scale.HasValue) {
        $parameter.Size = $Scale.Value;
    }

    return $parameter;
}