错误来自' System.String'的无效演员表到' System.Byte []'在C#中调用存储过程

时间:2015-01-06 20:04:22

标签: c# asp.net sql-server tsql stored-procedures

我有一个下拉列表,其中填充了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页面运行时数据发生了什么变化;它是否在dropdownlist值中转换为字符串?我必须以某种方式转换它吗?

1 个答案:

答案 0 :(得分:1)

您可以考虑编写一种方法,将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);