PostgreSQL으로 Dapper SQL 쿼리와 매개 변수에 관한 질문

c# dapper dialect postgresql sql

문제

현재는 Dapper에 대해 배우고 있습니다. 나는 여기와 다른 장소 ( 이것을 포함 하여 )를 많이 수색했는데 나의 의심에 대한 구체적인 답을 찾을 수 없었다.

Dapper가 일반 SQL 언어를 사용합니까 아니면 DB 엔진에만 해당합니까? 즉, 기본 데이터베이스 엔진에서 예상되는 SQL 구문을 사용합니다. 처음과 12 개 이상의 예제를 읽은 후에 나는 SQL 쿼리가 일반 쿼리를 사용한다고 생각했지만 PostgresSQL ODBC에서 구문과 매개 변수에 문제가 발생했습니다.

이 POCO 클래스 예제를 사용하면 ...

public class CardType {

    //Autoincremented Key
    public int Id { get; set; }

    public string Type { get; set; }

    public string Description { get; set; }
}

... 다음 행은 나를 위해 작동하지 않습니다.

_connection.Execute(@"INSERT cardtypes (type, description) VALUES (@Type,  @Description)", cardType);

첫째,이 행은 ODBC 예외를 발생시킵니다. 테이블을 지정하기 전에 "INTO"절이 필요합니다. 또한 내가 잘못하지 않으면 PostgresSQL 매개 변수가 "?"로 설정되기 때문에 매개 변수도 작동하지 않습니다. 기호가 아니라 "@ 키워드". GitHub 페이지에서 다음을 찾을 수 있습니다.

Dapper에는 DB 특정 구현 세부 사항이 없으며 SQLite, SQL CE, Firebird, Oracle, MySQL, PostgreSQL 및 SQL Server를 포함한 모든 .NET ADO 공급자에서 작동합니다.

그래서 나는 이것으로 길을 잃는다. :) 많은 실험을 한 후에 모든 PostgresSQL을 퍼팅하는 것이 예상대로 작동한다는 것을 알았습니다. 예를 들어 다음 모든 사례가 성공했습니다.

//Manually parameters

var query = @"INSERT INTO cardtypes (type, description) values ('Administrator', 'The Boss')";
_db.Execute(query);


//Dynamic parameters

var dynamicParameters = new DynamicParameters();
dynamicParameters.AddDynamicParams(new {
    cardType.Type,
    cardType.Description
});

var query = @"INSERT INTO cardtypes (type, description) values (?, ?)";    //Note the '?' symbol
_db.Execute(query, dynamicParameters);


//Interpolating values
var query = $@"INSERT INTO cardtypes (type, description) values ('{cardType.Type}', '{cardType.Description}')";
_db.Execute(query);

이 예배는 잘 작동했습니다. 그러나 SQL 쿼리가 일반 SQL 언어 또는 특정 데이터베이스 엔진 언어인지 이해하는 것은 혼란 스럽습니다.

또한 Dapper.Contrib을 시도했지만 INSERT 문에서도 실패합니다. 예를 들면 다음과 같습니다.

_db.Insert(new CardType() {
    Type = "Administrator",
    Description = "The Boss"
});

그것도 실패합니다 ... 이상한 "["문자 예외.

내가 뭘 잘못하고있어?

나의 안부!

수락 된 답변

Dapper는 쿼리를 구문 분석하거나 사용자 지정 DSL을 제공하지 않습니다. 오히려 당신의 쿼리를 선택한 ADO.NET 공급자에게 직접 전달합니다. 그것은 어떤 경우에는 길을 따라 몇 개조하면 되겠 어를 할 않지만, 일반적인 의미에서 : 그것은 그대로입니다.

postgresql의 경우 IIRC 매개 변수는 콜론 접두사이며 접두사가 붙지 않습니다. @foo 대신 :foo 를 사용해보십시오.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow