복붙노트

[SQL] 여러 아이디의 SQL 쿼리의 C #의에서 절에 [마감]

SQL

여러 아이디의 SQL 쿼리의 C #의에서 절에 [마감]

나는 기본적으로 내 SQL 쿼리에서 절에서 여러 ID의를 사용하고 싶습니다. 지금은 두 가지 옵션이 하나가 쉼표를 얻을 수 있습니다 ID의이 텍스트 상자에서 분리 또는 내가 ID의 존재를 삽입 한 다음 아이디의이 SQL 문에 사용되는 얻을 수있는 목록보기 또는 그리드 뷰를 넣을 수 있습니다. 어떻게이 일을 수행하는 코드, 좀 도와 주시겠습니까?

해결법

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

    1.텍스트 상자 값을 얻기 위해이 같은 코드를 가지고있다 -

    텍스트 상자 값을 얻기 위해이 같은 코드를 가지고있다 -

    "select * from table where id in ( "+textbox1.text+")";
    

    그러나 이것은 SQL 인젝션 문제로 당신을 이끌 것입니다. 더 나은 방법 그래서 될 것이다 : -

    var command = new SqlCommand("SELECT * FROM table WHERE id = @value")
    {
      Connection = connection();
    };
    
    command.Parameters.AddWithValue("value", textbox1.text);
    var dataReader = command.ExecuteReader();
    
  2. ==============================

    2.데이터베이스에 사용자 입력을 보낼 수있는 올바른 방법은 매개 변수를 사용하고 있습니다. 그들 중 많은 결과를 반환하는 데 쉼표로 구분 된 값을 포함하는 단일 매개 변수와 함께 사용하고 기대하는 시도 이후 IN 연산자는 종종 경험이 부족한 개발자를 혼란. IN 연산자는 값 목록을 기대하기 때문에 실수입니다, 목록을 포함하지 않는 단일 값.

    데이터베이스에 사용자 입력을 보낼 수있는 올바른 방법은 매개 변수를 사용하고 있습니다. 그들 중 많은 결과를 반환하는 데 쉼표로 구분 된 값을 포함하는 단일 매개 변수와 함께 사용하고 기대하는 시도 이후 IN 연산자는 종종 경험이 부족한 개발자를 혼란. IN 연산자는 값 목록을 기대하기 때문에 실수입니다, 목록을 포함하지 않는 단일 값.

    그래서, 당신은 쉼표 코드에서 문자열을 분리 나누고 각각의 값에 대한 매개 변수 쿼리를 제공한다 무엇을해야하는지 IN 연산자에 대한 쿼리를 매개 변수화합니다.

    다음은 기본 예제입니다 :

    var userInput = "1,2,3,4,5,6";
    var values = userInput.Split(',');
    
    using(var command = new OdbcCommand())
    {
        var sql = "SELECT * FROM table where id IN(";
    
        for(int i=0; i < values.Length; i++) {
            sql = $"{sql} @{i},";
            command.Parameters.Add($"@{i}", OdbcType.Int).Value = values[i];
        }
    
        command.CommandText = sql.TrimEnd(',') +");";
        command.Connection = con;
        using(var reader = Command.ExecuteReader())
        {
            while(reader.Read())
            {
                // do your stuff with the data
            }
        }
    }
    
  3. from https://stackoverflow.com/questions/46520435/multiple-ids-in-in-clause-of-sql-query-c-sharp by cc-by-sa and MIT license