2010-03-30 6 views
1

C#을 웹 페이지에서 여러 매개 변수와 SQL 함수를 호출하는 방법 :나는 다음과 같은 구문으로 호출되는 MS SQL 기능이

SELECT Field1, COUNT(*) AS RecordCount 
FROM GetDecileTable('WHERE ClientID = 7 AND LocationName = ''Default'' ', 10) 

첫 번째 매개 변수는 함수가 사용하는 특정 WHERE 절을 통과 내부 쿼리 중 하나에 대한 I 프런트 엔드 C# 1 페이지에이 함수를 호출 할 때, I는 WHERE 절 내부의 개별 필드에 대한 파라미터 값을 보낼 필요가 (본 예에서는, 모두 ClientID & LocationName 필드)

현재 C# 코드는 같다 내가, 내가 SQL 프로파일 러에서 다음 코드이받을 수 있나요 때

String SQLText = "SELECT Field1, COUNT(*) AS RecordCount FROM GetDecileTable('WHERE 
        ClientID = @ClientID AND LocationName = @LocationName ',10)"; 
SqlCommand Cmd = new SqlCommand(SQLText, SqlConnection); 
Cmd.Parameters.Add("@ClientID", SqlDbType.Int).Value = 7; // Insert real ClientID 
Cmd.Parameters.Add("@LocationName", SqlDbType.NVarChar(20)).Value = "Default"; 
       // Real code uses Location Name from user input 
SqlDataReader reader = Cmd.ExecuteReader(); 

:이이 실행

exec sp_executesql N'SELECT Field1, COUNT(*) as RecordCount FROM GetDecileTable 
(''WHERE ClientID = @ClientID AND LocationName = @LocationName '',10)', 
N'@ClientID int,@LocationID nvarchar(20)', 
@ClientID=7,@LocationName=N'Default' 

를, SQL은 첫 과거 구문 분석 할 수없는 오류가 발생합니다 @ClientID에 스칼라 변수 @ClientID이 정의되어야한다고 언급되어 있습니다. 변수를 먼저 선언하도록 코드를 수정하면 두 번째로 @ClientID에 변수가 이미 있음을 알리는 오류가 발생합니다.

exec sp_executesql N'DECLARE @ClientID int; DECLARE @LocationName nvarchar(20); 
SELECT Field1, COUNT(*) as RecordCount FROM GetDecileTable 
(''WHERE ClientID = @ClientID AND LocationName = @LocationName '',10)', 
N'@ClientID int,@LocationName nvarchar(20)', 
@ClientID=7,@LocationName=N'Default' 

는 내가 테이블에서 데이터를 선택하고 할 때 매개 변수를 추가 및 C#에서 SQL 코드를 호출하는이 방법이 잘 작동하는지 알고 있지만 나는 WHERE 임베디드의 '인용 부호 안에 매개 변수를 포함하는 방법을 잘 모르겠습니다 절이 함수에 전달됩니다.

아이디어가 있으십니까?

답변

1

SELECT Field1, COUNT(*) AS RecordCount FROM GetDecileTable('WHERE 
ClientID = @ClientID AND LocationName = @LocationName ',10) 

이 당신의 변수는 그들이 단지의 한 부분으로 간주되는 문자열 내부

SELECT Field1, COUNT(*) AS RecordCount FROM GetDecileTable('WHERE 
ClientID = ' + @ClientID + ' AND LocationName = ' + @LocationName,10) 

을 사용한다이었다.

+0

감사하지만,이 상황에서 청구서에 맞지 않습니다. 문제는 하위 WHERE 절에 포함 된 따옴표로 인해 발생합니다. – Marshall