문제
저는 C#.NET(Windows 상자에 있음)을 기본 언어로 사용하고 PostgreSQL을 백엔드 데이터베이스(백엔드는 Linux 상자에 있음)로 사용하는 프로젝트를 진행 중입니다.ODBC.NET을 사용하면 이 두 구성 요소를 쉽게 통합할 수 있다고 들었습니다.
실제로 C#과 PostgreSQL을 함께 작동하도록 설정한 경험이 있는 사람이 있습니까?그렇다면 해결 방법, 발견한 문제 등에 대한 제안 사항이 있습니까?
해결책
저는 C#과 Postgres를 사용하여 작업하고 있습니다. Npgsql2 구성 요소이며 빠르게 작동하므로 추천합니다.
다음에서 다운로드할 수 있습니다. https://github.com/npgsql/Npgsql/releases
메모: 어떤 데이터베이스와도 작동하는 애플리케이션을 원한다면 다음을 사용할 수 있습니다. DbProviderFactory 수업을 듣고 쿼리를 사용하여 IDbConnection, IDb명령, IDataReader 및/또는 IDb트랜잭션 인터페이스.
다른 팁
Npgsql - PostGreSQL용 .Net 공급자는 탁월한 드라이버입니다.보다 전통적인 ADO.NET 프레임워크를 사용해 본 적이 있다면 정말 운이 좋을 것입니다.PostGreSQL 연결과 거의 동일해 보이는 Oracle에 연결하는 코드가 있습니다.Oracle에서 전환하고 뇌 세포를 재사용하기가 더 쉽습니다.
이는 SQL 호출로 수행하려는 모든 표준 작업을 지원하지만 호출도 지원합니다. 기능 (저장 프로시저).여기에는 다음을 포함합니다. 참조 커서.문서는 잘 작성되었으며 철학적이거나 난해하지 않으면서도 유용한 예제를 제공합니다.문서에서 바로 코드를 훔치면 즉시 작동합니다.
Francisco Figueiredo Jr와 팀은 이 작업을 훌륭하게 수행했습니다.
지금은 다음에서 이용 가능합니다. Github.
https://github.com/franciscojunior/Npgsql2
정보를 얻기에 더 좋은 사이트는 다음과 같습니다.http://npgsql.projects.postgresql.org/
문서를 읽어보세요!http://npgsql.projects.postgresql.org/docs/manual/UserManual.html
PostgreSQL용 Linq 공급자는 다음 위치에 있습니다. https://www.nuget.org/packages/linq2db.PostgreSQL/.
우리는 PostgreSql용 devart ado.net 데이터 공급자와 함께 Visual Studio 2005를 사용하여 여러 애플리케이션을 개발했습니다(http://www.devart.com/pgsqlnet/).
이 공급자의 장점 중 하나는 완전한 Visual Studio 지원을 제공한다는 것입니다.최신 버전에는 linq와 같은 새로운 프레임워크 기능이 모두 포함되어 있습니다.
오늘날 대부분의 언어/플랫폼(Java, .NET, PHP, Perl 등)은 거의 모든 DBMS(SQL Server, Firebird, MySQL, Oracle, PostgresSQL 등)에서 작동할 수 있으므로 1초도 걱정할 필요가 없습니다.물론 결함이나 작은 문제가 있을 수 있지만 큰 문제는 없습니다.
jalcom이 제안한 대로 쉽게 적응할 수 있는 애플리케이션을 가지려면 인터페이스 세트 또는 최소한 기본 클래스 세트(DbConnection, DbCommand 등)에 대해 프로그래밍해야 합니다.
너무 많은 문제가 있으면 안됩니다.다른 사람들이 언급했듯이 사용 가능한 .Net PostgreSQL 데이터 공급자가 많이 있습니다.주의해야 할 사항 중 하나는 Linq와 같은 기능을 사용하지 못할 수도 있다는 것입니다.
Linq 지원 부족으로 인해 중단되지 마십시오.내가 사용하는 패턴은 항상 내 데이터를 목록으로 반환한 다음 Linq로 반환하는 것입니다.나는 MySQL의 동일한 (분명히 모호한) Linq 표현식이 SQL Server에서와 동일한 데이터를 가져오지 않는다는 것을 발견했을 때 종교적으로 이 작업을 시작했습니다.
도구-->NuGet 패키지 관리자->관리자 Nuget 패키지 관리자로 이동하세요.
검색하다 NpgSQL 그런 다음 프로젝트를 선택하고 설치를 클릭하십시오.
샘플 코드
public void Demo()
{
NpgsqlConnection connection = new NpgsqlConnection();
connection = d_connection; // your connection string
connection.Open();
NpgsqlCommand cmd = new NpgsqlCommand();
try
{
cmd.Connection = connection;
cmd.CommandText = "select * from your table name";
cmd.CommandType = System.Data.CommandType.Text;
using (var dataReader = cmd.ExecuteReader())
{
while (dataReader.Read())
{
string answer= dataReader.IsDBNull(0) ? "" : dataReader.GetString(0);
}
dataReader.Dispose();
}
}
catch (Exception e)
{
}
finally
{
cmd.Dispose();
connection.Dispose();
}
}
postgreSql에서는 대소문자를 구분하므로 대문자를 사용하지 마십시오.
Npgsql은 훌륭한 드라이버이지만 지금까지 발견한 유일한 문제는 숫자 값이 System.Decimal에 맞지 않아 옵션만 각 쿼리 또는 DB 스키마에 적합하다는 것입니다.
https://github.com/npgsql/Npgsql.EntityFrameworkCore.PostgreSQL/issues/438#issuecomment-486586272