将字符串添加到 char[x] 类型的 SQL 服务器字段的正确方法是什么?

What is the correct way to add a string to SQL Server field of type char[x]?

我正在 PowerShell 中编写脚本以利用我的 SQL Server 2000 数据库中的存储过程。为了利用带参数的存储过程,我使用 AddWithValue() 方法 sqlcmd.Parameters。我试图将一个字符串插入到数据类型为 char 大小为 8 的列中。我一直在使用 AddWithValue() 方法,但我不断收到以下两个错误之一:

Cannot convert value "aamstest" to type "System.Char". Error: "String must be exactly one character long."
At D:\scripts\SCADAViewBulkAdd\scadaview_bulk_add.ps1:196 char:2
+ $SqlCmd.Paramters.AddWithValue("@USNAME",[char]$USNAME);
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastParseTargetInvocation

You cannot call a method on a null-valued expression.
At D:\scripts\SCADAViewBulkAdd\scadaview_bulk_add.ps1:197 char:2
+ $SqlCmd.Paramters.AddWithValue("@GRNAME",$GRNAME);
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

存储过程:

CREATE PROCEDURE spAddUserToGroup 
    @USNAME char(8), @GRNAME char(8) 
AS
BEGIN
    INSERT INTO GLOBE_USER_GROUP 
    VALUES (@USNAME, @GRNAME)
END
GO

AddWithValue() 从这里调用:

# Call SQL Stored Procedure spAddUserToGroup
function SpAddUserToGroup ($usnameParam,$grnameParam)
{
    $SqlConnection = New-Object System.DATA.SqlClient.SqlConnection;

    $SqlConnection.ConnectionString = "SERVER=server01;DATABASE=FIGDB;UID=y;PWD=y";

    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand;

    # Indicate working with stored procedure
    $SqlCmd.CommandType=[System.Data.CommandType]'StoredProcedure';

    # Supply name of stored procedure
    $SqlCmd.CommandText = "spAddUserToGroup";
    $SqlCmd.Connection = $SqlConnection;

    # Set stored procedure parameters
    $USNAME = $usnameParam;
    $GRNAME = $grnameParam;

    Write-Host $USNAME
    Write-Host $GRNAME

    # Add parameters to string
    $SqlCmd.Paramters.AddWithValue("@USNAME",[char]$USNAME);
    $SqlCmd.Paramters.AddWithValue("@GRNAME",$GRNAME);

    # Initialize SQL Adapter
    #$SqlAdapter = New-Object System.Data.SqlClient.SqlAdapter;
    #$SqlAdapter.SelectCommand = $SqlCmd;

    ...
}

问题: 如何使用 PowerShell 使用存储过程将字符串插入到 char[8] 类型的列中?我的错误是由于调用 AddWithValue() 不正确还是我处理变量类型不当造成的?

新答案

事实证明,您可以指定参数名称,但并非必须如此。我认为您的实际问题是您拼写了 Parameter 错误,这就是为什么 SQL 不接受您的输入。

将您的代码更改为此,它应该可以工作。

$SqlCmd.Parameters.AddWithValue("@USNAME",[char]$USNAME);
$SqlCmd.Parameters.AddWithValue("@GRNAME",$GRNAME);

旧答案,错误

我认为调用存储过程时不应该指定参数名称。试试这个:

更改这两行:

$SqlCmd.Paramters.AddWithValue("@USNAME",[char]$USNAME);
$SqlCmd.Paramters.AddWithValue("@GRNAME",$GRNAME);

为此:

$SqlCmd.Paramters.AddWithValue([char]$USNAME,$GRNAME)

此外,PowerShell 不需要行结束字符,例如分号。