0
여기

는 2014 SQL 서버 내 저장 프로 시저 :잘못된 열 이름은

if (TableFunctions.doesTableExist(ComboBoxSelectedProfile.SelectedItem + "Users", dbConnectionString)) 
{ 
    // DynamicSQL 
    using (SqlCommand command = new SqlCommand("spSelectUserFromProfileUsers", connection)) 
    { 
     command.CommandType = CommandType.StoredProcedure; 

     command.Parameters.AddWithValue("@TableName", ComboBoxSelectedProfile.SelectedItem + "Users"); 
     command.Parameters.AddWithValue("@User", TextBoxUserName.Text); 

     command.ExecuteNonQuery(); 
    } 
} 

내가 오류를 받고 있어요 : 여기

CREATE PROCEDURE [dbo].[spSelectUserFromProfileUsers] 
    @TableName NVARCHAR(20), 
    @User NVARCHAR(20) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @query NVARCHAR(MAX); 
    SET @query = 'SELECT * FROM ' + QUOTENAME(@TableName) + ' WHERE Users =' + @User 

    EXECUTE sp_executesql @query 
END 

및 Visual Studio에서 내 코드입니다 :

Invalid column name /Text that I entered the textbox/

오랫동안 해결책을 찾고 있었지만 아무 것도 찾을 수 없었습니다. 도움을 많이 주셔서 감사합니다.

+0

결과는 다음과 같습니다. SELECT [from YourTable] WHERE Users = Some_User_Name' .... 문제가 보이십니까? 'Some_User_Name'은'Some_User_Name''이어야합니다. – Lamak

+0

하지만'@User '를 추가하면 @User를 매개 변수로 재확인하지 않습니다 – WeinForce

+0

그리고이 코드는 여전히 ti sql을 엽니 다. 주입 보안 취약점은 sproc 내부의 연결을 사용하기 때문에 발생합니다. –

답변

0

당신은 당신의 Users 값은 인용 부호 안에 있는지 확인해야합니다. sql이고 작은 따옴표 만 사용할 수 있으므로 이상한 방법으로 처리해야합니다.

SET @query='SELECT * from '+QUOTENAME(@TableName)+' where Users='''[email protected]+'''' 
+0

그것은 효과가 있었지만 왜 많은 quottes 마크의 beacuse을 이해하는 것은 어렵습니다. – WeinForce

+0

'' '' '' '사이에' '를 설정할 수 없으므로, tjere는 하나를 더 추가하는 옵션이며, sql은이를 필요에 따라 해석합니다. Simillar 상황은 여기에 있습니다 : '' '. – MadOX

-1

쿼리가 제대로 묶이지 않았습니다.

SET @query="SELECT * from '+QUOTENAME(@TableName)+' where Users='[email protected]+'" 
+0

'C#'에서는 작동하지만'sql'에서는 작동하지 않습니다. 거기에 큰 따옴표가 없기 때문입니다. – MadOX

+0

죄송합니다. 내 인용 부호가 있어야합니다. 문제는 동일 하긴하지만. –

0

동적 SQL을 실행하려고하는 저장 프로 시저의 구문이 잘못되었습니다. 에서

DECLARE @ParmDefinition NVARCHAR(2000); 

SET @query='SELECT * from '+QUOTENAME(@TableName)+' where [email protected]'; 
SET @ParmDefinition = N'@User NVARCHAR(20)'; 
EXECUTE sp_executesql @query, @ParmDefinition, @User = @User; 

documentation about sp_executesql 당신이 동적 SQL 텍스트를 추출하기 위해 노력하지 않고 내부로 매개 변수를 사용하는 것을 볼 가치와 값을 추가하는 것입니다 수 있습니다. 그 후에 sp_executesql (@ParmDefinition)에 대한 매개 변수를 정의하고 그 값 (@User = @User)을 sp_executesql에 대한 두 번째 및 세 번째 매개 변수로 설정해야합니다.