Настройка ASP.NET Development Server для подключения к базе данных postgres - PullRequest
2 голосов
/ 12 февраля 2009

У меня есть приложение ASP.NET, настроенное для подключения к базе данных MS SQL Server, и я пытаюсь изменить его, чтобы использовать вместо него базу данных postgres.

Я бы хотел, по возможности, не изменять код C #.

Я ожидал, что будет достаточно следующих изменений:

  1. Добавить ссылку на подходящий драйвер postgres, в данном случае NauckIT.PostgreSQLProvider.dll
  2. Добавьте тег provider, чтобы указать используемый драйвер, в данном случае:
   <connectionStrings>
     <add name="default" connectionString="Server=127.0.0.1;Port=5432;User Id=finnw;Password=XXX;Database=default;Pooling=false"
       <b>providerName="Npgsql"</b> />

   </connectionStrings>

Но тег providerName, похоже, не действует (хотя сам по себе он не генерирует ошибку). Вместо этого я все еще вижу это сообщение об ошибке в браузере:

[ArgumentException: Keyword not supported: 'port'.]
   System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey) +4907604
   System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules) +98
   System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) +55

Похоже, что он все еще пытается использовать драйвер MS SQL Server.

Как мне убедить не делать этого?

Я использую ASP.NET Development Server, а не IIS. Сначала я думал, что это может быть проблемой, но это сообщение на форуме предлагает иное.

Ответы [ 3 ]

2 голосов
/ 13 февраля 2009

Вам необходимо скачать и настроить драйвер соединения PostgreSQL ADO.Net, для этого есть несколько, наиболее часто используется Npgsql (http://pgfoundry.org/projects/npgsql/), сначала скачайте драйвер. (Загрузите Npgsql2, это новый !)

Убедитесь, что вы используете правильный DbProvider в качестве Npgsql2

Убедитесь, что в ваших ссылках указан провайдер Npgsql2 (в любом случае вы можете добавить его в свой web.config):

<system.web>
 <compilation>
  <assemblies>
   <add assembly="Npgsql2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>
  </assemblies>
 </compilation>
</system.web>

Убедитесь, что у вас установлен поставщик данных Npgsql2, как и ожидалось: (вы можете добавить это в свой файл web.config):

<system.data>
 <DbProviderFactories>
  <add name="Npgsql2 Data Provider"
       invariant="Npgsql2"
       description=".Net Framework Data Provider for PostgreSQL" 
       type="Npgsql.NpgsqlFactory, Npgsql2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
 </DbProviderFactories>
</system.data>

Добавьте строку подключения как обычно:

<connectionStrings>
 <add name="Blog"
      connectionString="SERVER=localhost;Database=blogstarterkit;User name=test;Password=test" 
      providerName="Npgsql2"/> <!-- provider invariant name, configured above -->
</connectionStrings>
1 голос
/ 12 февраля 2009

Довольно замечательный http://www.connectionstrings.com/ дает примеры всевозможных строк подключения, и с вами все будет в порядке. К сожалению, ваш код использует SqlClient, который является единственным доступом к базе данных SqlServer в .Net. Тебе придется взломать код ...

0 голосов
/ 12 февраля 2009

Вам необходимо перейти от использования классов в System.Data.SqlClient к использованию их аналогов в пространстве имен System.Data.Odbc. Вам также понадобится получить драйвер ODBC , установить его и настроить соединение ODBC на сервере. Затем вы можете использовать это именованное соединение для доступа к вашей базе данных.

...