2014-04-29 2 views
0

매개 변수가있는 저장 프로 시저를 실행하기 위해 다음 ADO.Net C# 코드가 있습니다. 내가 프로파일을 관찰하면 그것은매개 변수에 'N'문자가없는 문을 작성하는 방법

exec uspSecurityGetChildActivitiesByInternalName @ActivityInternalName = N'INVWLVIEWEDIT' 

로 나열하지만 매개 변수 값 이전 N을 피할 필요

exec uspSecurityGetChildActivitiesByInternalName @ActivityInternalName = 'INVWLVIEWEDIT' 

나는 그것을 수정해야합니다. 가능하면 원래의 추적에서 N없이오고 있기 때문에 가능합니다 (소스 코드가 없습니다).

N없이 프로파일 러에 exec 문을 만들기 위해 다음 C# 코드를 어떻게 수정할 수 있습니까?

참조

  1. Can SQL Profiler display return result sets alongside the query?
  2. Exception when AddWithValue parameter is NULL

코드 :

using (SqlCommand command = new SqlCommand(spName, connection)) 
{ 
    WriteLogFunction(spStatement); 
    command.CommandType = System.Data.CommandType.StoredProcedure; 

    if (paramsList.Count > 0) 
    { 
     foreach (Parameter p in paramsList) 
     { 
      command.Parameters.AddWithValue(p.MyParameterName, p.MyVal); 
     } 
    } 

    string resultVal=String.Empty; 

    using (SqlDataReader reader = command.ExecuteReader()) 
    { 
     if (reader.HasRows) 
     { 
      while (reader.Read()) 
      { 
       resultVal = reader.GetString(0); 
      } 
     } 
    } 

    //Other code 
} 
+0

왜? 'N'은 값이 유니 코드로 전달됨을 의미합니다. –

+0

@YuriyGalanter 기본 설정을 사용하려면이 값이 필요합니다. 유니 코드를 지정하지 않고 – Lijo

+0

모든 매개 변수가 SP 문자열로 전달 되었습니까? SP에 정의 된 크기는 얼마입니까? –

답변

3

당신은 유니 코드를 지원하지 않는 페이지를 강제 할 수 arameter 지정하여이 VarChar 같은 유형의 :

command.Parameters.AddWithValue(p.MyParameterName, p.MyVal).SqlDbType = SqlDbType.VarChar; 

이 'N'없이 매개 변수를 전달해야한다 -하지만 모든 매개 변수 문자열이있는 경우 - 당신은 정수 있도록 검사를 추가해야합니다 나머지는 나사되지 않습니다 .

코드에서 당신이 전달 된 값에서 유추 할 매개 변수의 유형을시키는 있습니다 : 어떤 이유로 당신의 저장 프로 시저를 가정

1

ANSI 문자열이 아닌 유니 코드 문자열이 필요합니다. .NET 문자열은 유니 코드 문자열이므로 매개 변수 유형은 유니 코드 문자열로 유추됩니다 (N ''로 연결됨). 비 유니 코드이어야하는 매개 변수의 경우 매개 변수의 DbType 속성을 AnsiString 또는 SqlDbType을 Text로 설정해야합니다 (NText와 반대). (또는 예 ... 유리가 말했듯이, VarChar은 아마도 당신이 원하는 것일 것입니다.)

SQLParameter 객체는 AddWithValue에 대한 호출에서 반환되므로 필요에 따라 설정할 수 있습니다.

나는 이것을 코드로 테스트하지 않았기 때문에 뭔가를 놓친 것이 아니기 때문에 매개 변수의 유형을 지정하는 방법이다.

관련 문제