수색…


통사론

  • public static IEnumerable <T> Query <T> (이 IDbConnection cnn, 문자열 sql, 개체 param = null, SqlTransaction 트랜잭션 = null, 부울 buffered = true)
  • public static IEnumerable <dynamic> 쿼리 (this IDbConnection cnn, 문자열 sql, 개체 param = null, SqlTransaction 트랜잭션 = null, bool buffered = true)

매개 변수

매개 변수 세부
CNN 데이터베이스 연결이 이미 열려 있어야합니다.
SQL 실행할 명령.
매개 변수 매개 변수를 추출 할 객체입니다.
트랜잭션 이 쿼리가있을 경우 트랜잭션의 일부입니다.
완충 된 쿼리의 결과를 버퍼링할지 여부. 이 매개 변수는 선택적 매개 변수이며 기본값은 true입니다. buffered가 true 일 때 결과는 List<T> 버퍼링 된 다음 여러 열거 형에 안전한 IEnumerable<T> 로 반환됩니다. buffered가 false이면 sql 연결은 읽기가 끝날 때까지 열려있어 메모리에서 한 번에 한 행을 처리 할 수 ​​있습니다. 여러 열거 형은 데이터베이스에 대한 추가 연결을 생성합니다. 버퍼가있는 false는 반환되는 레코드의 아주 작은 조각 만 유지하는 경우 메모리 사용을 줄이는 데 매우 효율적이지만 결과 집합을 열심히 구현하는 것과 비교할 때 상당한 성능 오버 헤드 가 있습니다. 마지막으로 수많은 버퍼링되지 않은 sql 연결이있는 경우 연결을 사용할 수있게 될 때까지 연결 풀 기아가 요청을 차단하도록 고려해야합니다.

정적 유형 쿼리

컴파일 타임에 알려진 유형의 경우 Query<T> 제네릭 매개 변수를 사용하십시오.

public class Dog
{
    public int? Age { get; set; }
    public Guid Id { get; set; }
    public string Name { get; set; }
    public float? Weight { get; set; }

    public int IgnoredProperty { get { return 1; } }
}    

//
IDBConnection db = /* ... */;

var @params = new { age = 3 };
var sql = "SELECT * FROM dbo.Dogs WHERE Age = @age";

IEnumerable<Dog> dogs = db.Query<Dog>(sql, @params);

동적 유형 쿼리

일반 유형을 사용하지 않으면 동적으로 쿼리 할 수도 있습니다.

IDBConnection db = /* ... */;
IEnumerable<dynamic> result = db.Query("SELECT 1 as A, 2 as B");

var first = result.First();
int a = (int)first.A; // 1
int b = (int)first.B; // 2

동적 매개 변수를 사용한 쿼리

var color = "Black";
var age = 4;

var query = "Select * from Cats where Color = :Color and Age > :Age";
var dynamicParameters = new DynamicParameters();
dynamicParameters.Add("Color", color);
dynamicParameters.Add("Age", age);

using (var connection = new SqlConnection(/* Your Connection String Here */))
{
    IEnumerable<dynamic> results = connection.Query(query, dynamicParameters);
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow