将NVARCHAR值传递给存储过程
本文关键字:存储过程 值传 NVARCHAR | 更新日期: 2023-09-27 17:52:59
我有一个具有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%'
,它返回结果。
如何用DBHelper
addparameter
添加N
我不确定您的DBHelper做什么,但要将nvarchar类型的值传递给存储进程,以下是标准方式:
var param = new SqlParameter("@CompanyName ", SqlDbType.NVarChar, size)
param.Value = company.Trim();
上面的第三个参数是在sproc中使用nvarchar(size)
语法声明的nvarchar参数的大小。如果是nvarchar(max)
,则使用-1。
还要注意,您不需要使用"N %"前缀。ADO。网络层负责。