CSharp ado.net将数据类型nvarchar转换为数字时出错

时间:2013-05-15 06:19:35

标签: c# sql ado.net

假设我有一个包含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管理工具的环境

2 个答案:

答案 0 :(得分:1)

问题出在这一行:

OR @KeyWord  = Age

Age是一个整数,@KeyWord是字符串。要防止收到错误,请将age的数据类型转换为字符串

OR @KeyWord  = CAST(Age AS NVARCHAR(5))

答案 1 :(得分:-1)

尝试配置 sql 服务器管理.. 在工具 - 选项 - 设计师 - 取消选中“阻止保存更改......”