C#.net 里面 Parameter 问题
异常详细信息:
System.Exception: 将 nvarchar 值 '204,215 ' 转换为数据类型为 int 的列时发生语法错误。
SQL语句:
SELECT TOP 6 * FROM V_Attach WHERE attachTypeId = @attachTypeId AND destinationId in( @destinationId)
Parameter.Add( "@destinationId ", "204,215 ");
------解决方案--------------------会被解释成这样:
SELECT TOP 6 * FROM V_Attach WHERE attachTypeId = @attachTypeId AND destinationId in( '204,215 ')
所以可样写:
Begin
declare @Sql nvarchar(4000);
Set @Sql =N '
SELECT TOP 6 * FROM V_Attach WHERE attachTypeId = @attachTypeId AND destinationId in( ' + @destinationId + ')
';
exec (@Sql)
end
------解决方案--------------------sp_xml_preparedocument在一次提交多条数据的时候比较好用
给你个例子:
@xmldata 就是一个简单的xml,类型可以是 :ntext/varcahr/nvarchar
内容如下 " <root> <detail> <head_guid> </head_guid> <wp_code> </wp_code>
<edit_user> </edit_user> <del_flag> </del_flag> </detail> </root> "
create procedure [dbo].[P_UpdateWPIssueDetail_ForXml]
@XmlData VARCHAR(8000)
as
declare @XmlData_ID int
declare @head_guid varchar(50)
declare @wp_code varchar(50)
declare @del_flag varchar(50)
declare @edit_user varchar(50)
EXEC sp_xml_preparedocument @XmlData_ID OUTPUT, @xmldata, ' '
create table tmp_wp_detail(head_guid varchar(50) ,wp_code varchar(50) ,edit_user varchar(50),del_flag varchar(50))
select * into #wp_detail from tmp_wp_detail where 1 <> 1
drop table tmp_wp_detail
insert into #wp_detail
SELECT head_guid, wp_code,edit_user,del_flag FROM
OPENXML(@xmldata_id, '//detail ', 2) WITH (head_guid varchar(50), wp_code varchar(50),edit_user varchar(50),del_flag varchar(50))
EXEC sp_xml_removedocument @XmlData_ID
go
------解决方案--------------------没关系的,数据库字段是int型,你也可以用Varchar来用。
你需要把你的 204,205 ,改为 204 ', '205 试试看~~~~