복붙노트

[SQL] SqlParameter에 C #을 표 이름과 테이블 필드?

SQL

SqlParameter에 C #을 표 이름과 테이블 필드?

전 C #에서 SqlCommand를 통해 테이블 ​​이름과 테이블 필드 이름을 전달하는 방법을 알고 싶습니다.

그것을는 @ 기호를 사용하여 SQL 명령을 설정하여 수행하지만 작동하지 않았다있어 길을하려고 노력했다. 어떤 아이디어?

해결법

  1. ==============================

    1.당신은 SQL 주입에 대해 걱정하는 경우, 데 SqlCommandBuilder 클래스 (및 DbCommandBuilder의 다른 DB의 특정 버전) 제대로 테이블 이름을 탈출합니다 QuoteIdentifier라는 함수가 있습니다.

    당신은 SQL 주입에 대해 걱정하는 경우, 데 SqlCommandBuilder 클래스 (및 DbCommandBuilder의 다른 DB의 특정 버전) 제대로 테이블 이름을 탈출합니다 QuoteIdentifier라는 함수가 있습니다.

    var builder = new SqlCommandBuilder();
    string escTableName = builder.QuoteIdentifier(tableName);
    

    당신의 문을 구축하고 사출에 대해 걱정할 필요가 없습니다하지만 당신은 여전히 ​​모든 값에 대한 매개 변수를 사용해야 할 때 지금 당신은 탈출 값을 사용 할 수 있습니다.

  2. ==============================

    2.난 당신과 같은 SQL 문을 실행하려고하는 것 같아요

    난 당신과 같은 SQL 문을 실행하려고하는 것 같아요

    select @field from @table
    

    그러나 그것은 작동하지 않습니다. SQL은 단지 값, fieldName에 또는 테이블 이름에 매개 변수를 가질 수 없습니다.

    내 추측이 정확하지 않은 경우 귀하의 질문을 확장하십시오.

  3. ==============================

    3.SqlCommand를 파라미터 만 데이터를 전달하는데 사용될 수있다. 당신은 (예 : SELECT 문에 추가 필드가 추가된다) SQL 문을 수정하는 데 사용할 수 없습니다. 당신은 SQL 문을 수정해야하는 경우, 내가 TSQL 문을 만들기 위해 모두 StringBuilder를 사용하는 것이 좋습니다 것입니다.

    SqlCommand를 파라미터 만 데이터를 전달하는데 사용될 수있다. 당신은 (예 : SELECT 문에 추가 필드가 추가된다) SQL 문을 수정하는 데 사용할 수 없습니다. 당신은 SQL 문을 수정해야하는 경우, 내가 TSQL 문을 만들기 위해 모두 StringBuilder를 사용하는 것이 좋습니다 것입니다.

    더 자세히 설명하기 위해, 닷넷 (적어도하지 예상 할 수 스트레이트 포워드 방식으로) SQLSERVER로 보내기 전에 SQL을 연결하지 않습니다. 실제로 저장 프로 시저를 호출하고 별도의 인수를 전달합니다. 이 SQL Server가 쿼리 계획을 캐시하고 TSQL의 성능을 최적화 할 수 있습니다.

    당신이 있다면이하는 SqlCommand를 작성하는 ...

    var cmd = new SqlCommand("SELECT * FROM MyTable WHERE MyID = @MyID", conn);
    cmd.Parameters.AddWithValue("@MyID", 1);
    cmd.ExecuteNonQuery();
    

    이 SQL Server에 발급 TSQL입니다 ...

    exec sp_executesql N'SELECT * FROM MyTable WHERE MyID = @MyID',N'@MyID int',@MyID=1
    

    당신은 MSDN에 sp_executesql에 대한 자세한 내용을보실 수 있습니다.

  4. from https://stackoverflow.com/questions/3128582/table-name-and-table-field-on-sqlparameter-c by cc-by-sa and MIT license