【发布时间】:2015-01-06 20:04:22
【问题描述】:
我有一个下拉列表,其中填充了来自 SQL Server 的 varbinary(256) 列。我将此下拉列表中的选定值发送到存储过程,但出现错误
从“System.String”到“System.Byte[]”的转换无效。
C# 代码正在调用运行此查询以将名称和 ID 返回到下拉列表的 SP。
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 页面运行时数据发生了什么变化;它是否转换为下拉列表值中的字符串?我必须以某种方式转换它吗?
【问题讨论】:
-
如果你设置一个断点并检查
ddl_staff.SelectedItem.Value的值,你会得到什么? -
您是否检查过下拉列表的 SelectedItem.Value 的值,该值在您需要二进制的参数中用作字符串,并且您正在添加字符串值,在您的查询中您应该转换 SelectedItem。二进制值,你能检查一下吗
-
另外,想知道参数是否应该是
SqlDbType.VarBinary,因为它在你的SQL中被声明为varbinary?
标签: c# asp.net sql-server tsql stored-procedures