2013-12-22 58 views
0

我在SQL波紋管SP:如何在sp參數前添加N?

 create proc spGetValue(@Field nvarchar(20)) 
    as 
    select * from ASI_TblWorkflow 
    where Caption = @Field 

當我打電話SP這樣的:EXEC spGetValue @Field = 'مرحله' 它不返回任何記錄。但如果我在像N'مرحله'這樣的字符串之前使用N,它將返回所需的記錄。 我知道n是國家語言字符,但由於我的參數是Nvarchar,爲什麼我的價值之前需要N? 另外我從我的C#代碼中調用這個sp。我不能在我的字符串值之前加N。我如何添加N之前,我的參數內sp?!

+0

''this''是一個varchar,惠斯特'N'this''類型爲nvarchar。當你將一個varchar字段賦值給一個nvarchar時,它被隱式轉換;大部分時間都很好。但是,當您使用unicode功能時,varchar將無法保存這些值,因此即使在將其轉換爲nvarchar之前,該信息也會丟失。不幸的是,系統無法確定您最初分配給的varchar應該是nvarchar;你必須告訴它。 – JohnLBevan

+0

'N'將字符串聲明爲'NVARCHAR',你能否將參數從c#映射到'SqlDbType.NVarChar'? – Ric

+0

我的參數是字符串。我找不到任何方法將字符串轉換爲SqlDbType.NVarChar。我有一些其他的SP與nvarchar參數和相同的波斯值,工作正常! –

回答

-4
CREATE TABLE tblIPBlackList (IPAddress varchar(50)) 
go 
CREATE PROCEDURE [dbo].[AddIPToBlacklist] 
@ipAddress nvarchar(50) = '' 
AS 
BEGIN 
SET NOCOUNT ON; 
INSERT INTO [tblIPBlackList] ([IPAddress]) VALUES (@ipAddress) 
END 

go 
exec AddIPToBlacklist @ipAddress=N'127.0.0.1' 

select * from tblIPBlackList 
+0

-1:這個問題如何回答? –

0

試試這個

SqlConnection connection = new SqlConnection("connection string"); 
SqlCommand sqlcmd = new SqlCommand("spGetValue", connection); 
sqlcmd.CommandType = System.Data.CommandType.StoredProcedure; 

SqlParameter pField = sqlcmd.Parameters.Add("@Field", System.Data.SqlDbType.NVarChar, 50); 
pField.Value = "value here"; 

connection.Open(); 
SqlDataReader reader = sqlcmd.ExecuteReader(); 
+0

Microsoft採用不同的方式:https://msdn.microsoft.com/en-us/library/40959t6x(v=vs.110).aspx SqlParameter param = new SqlParameter( 「@Description」,SqlDbType.NVarChar,16) ; param.Value =「飲料」; command.Parameters.Add(param); – Reid