配置ASP.NET Development Server以连接到postgres数据库

时间:2009-02-12 12:19:36

标签: asp.net postgresql connection-string

我有一个现有的ASP.NET应用程序,它配置为连接到MS SQL Server数据库,我正在尝试修改它以使用postgres数据库。

如果可能的话,我想避免修改C#代码。

我预计以下更改就足够了:

  1. 添加对合适的postgres驱动程序的引用,在本例中为NauckIT.PostgreSQLProvider.dll
  2. 添加provider标记以指定要使用的驱动程序,在本例中为:
  3.    <connectionStrings>
         <add name="default" connectionString="Server=127.0.0.1;Port=5432;User Id=finnw;Password=XXX;Database=default;Pooling=false"
           providerName="Npgsql" />
    
       </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。最初我认为这可能是问题,但this forum post建议不这样做。

3 个答案:

答案 0 :(得分:2)

你需要下载和配置你的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 :(得分:1)

相当精彩的http://www.connectionstrings.com/给出了各种连接字符串的示例,而你的看起来还不错。不幸的是,您的代码使用的是SqlClient,它是.Net中仅支持SqlServer的数据库访问。你将不得不破解一些代码......

答案 2 :(得分:0)

您需要从使用System.Data.SqlClient中的类更改为在System.Data.Odbc命名空间中使用它们的类似物。您还需要获取ODBC driver,安装它,并在服务器上设置ODBC连接。然后,您可以使用此命名连接来访问您的数据库。