1

假设我有一个 3 列的表

   ID       Int
   Name     nvarchar(63)
   Age      Int

我有一个程序来搜索关键字输入的所有行匹配。

Create Procedure usp_Search

 @KeyWord nvarchar(63)
as
begin
    SEKECT * FROM TblPersonal
             WHERE 
                   @KeyWord IS NULL
                OR @KeyWord  = Age
                OR Name Like N'%'+@KeyWord+'%'  
end

当我使用 SQl 管理工具进行测试时,它工作正常

DECLARE @return_value int

EXEC    @return_value = [dbo].[usp_Search]
        @KeyWord = NULL

但是当在 ADO.net 中执行并传递DBNull.Value给 SqlParameter 我有错误

“将数据类型 nvarchar 转换为数字时出错”

任何人都可以告诉我 ADO.net 和 SQl 管理工具的环境有什么不同

4

2 回答 2

1

问题出在这一行:

OR @KeyWord  = Age

该列Age是整数并且@KeyWord是字符串。为防止出现错误,请将 的数据类型转换age为字符串,

OR @KeyWord  = CAST(Age AS NVARCHAR(5))
于 2013-05-15T06:24:43.570 回答
-1

尝试配置您的sql server 管理.. 在工具 - 选项 - 设计器 - 取消选中“防止保存更改...”

于 2013-05-15T06:26:51.053 回答