错误 在 C# 调用存储过程中从“System.String”强制转换为“System.Byte[]”无效

本文关键字:System 转换 Byte 无效 过程中 存储过程 存储 String 错误 调用 | 更新日期: 2023-09-27 18:36:33

我有一个下拉列表,其中填充了来自SQL Server的varbinary(256)列。 我将此下拉列表中的选定值发送到存储过程,但出现错误

从"System.String"到"System.Byte[]"的转换无效。

C# 代码正在调用运行此查询的 SP,以将名称和 id 返回到下拉列表中。

SELECT staffID, sAMAccountName,  (sn + ', ' + givenName) AS fullName
FROM staff
WHERE deleteEmployee = 'no' AND recordType = 'staff'
ORDER BY sn

我添加参数如下。

objCmd.Parameters.Add("@staffID", SqlDbType.Binary).Value = ddl_staff.SelectedItem.Value;

如果我进入 SQL 并像下面这样执行 SP,我会得到预期的结果。

DECLARE @staffID varbinary(256)
SELECT @staffID = staffID from staff where samaccountname = 'johndoe'
EXECUTE stp_nho_status @staffID

当数据由 asp.net 页面运行时会发生什么情况;它是否转换为下拉列表值中的字符串? 我必须以某种方式转换它吗?

错误 在 C# 调用存储过程中从“System.String”强制转换为“System.Byte[]”无效

您可以考虑编写一个将string转换为byte[](可以转换为SqlDbType.VarBinary)的方法:

public static byte[] StrToByteArray(string value)
{
    System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
    return encoding.GetBytes(value);
}

然后你可以像这样使用它:

objCmd.Parameters.Add("@staffID", SqlDbType.VarBinary).Value = 
    StrToByteArray(ddl_staff.SelectedItem.Value);
相关文章: