将NVARCHAR值传递给存储过程

时间:2014-03-24 08:43:43

标签: c# asp.net sql sql-server

我有一个NVARCHAR参数的存储过程,如下所示:

ALTER PROCEDURE [dbo].[hr_Companies_GetByIDAndName] 
    @CompanyName NVARCHAR(100),
    @Lang int = 1
AS

Select * from companies
where
(@Lang = 1 AND NameLang1 LIKE @CompanyName )
    OR
    (@Lang = 2 AND NameLang2 LIKE  @CompanyName )
    )

我想提供一个nvarchar值,所以我使用这种语法:

DBHelper _helper = new DBHelper();
_helper.StoredProc = "hr_Companies_GetByIDAndName";               
_helper.AddParam("@CompanyName", "N'%" + company.Trim() + "%'", SqlDbType.NVarChar);
_helper.AddParam("@Lang", Language, SqlDbType.Int);
return _helper.GetTable();

但它正在返回null

当我在没有存储过程select * from companies where companyname like N'%mycompanyname%'的情况下运行查询时,它返回结果。

如何使用N DBHelper添加addparameter

1 个答案:

答案 0 :(得分:0)

我不确定你的DBHelper做了什么,只是将nvarchar类型的值传递给存储过程,以下是标准方法:

var param = new SqlParameter("@CompanyName ", SqlDbType.NVarChar, size)
param.Value = company.Trim();

上面的第3个参数是使用nvarchar(size)语法在sproc中声明的nvarchar参数的大小。如果是nvarchar(max)则使用-1。

另请注意,您不需要使用" N%"字首。 ADO.Net层负责处理它。