【问题标题】:Configuring ASP.NET Development Server to connect to a postgres database配置 ASP.NET 开发服务器以连接到 postgres 数据库
【发布时间】:2010-10-07 03:53:50
【问题描述】:

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

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

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

  1. 添加对合适的 postgres 驱动程序的引用,在本例中为 NauckIT.PostgreSQLProvider.dll
  2. 添加一个provider标签来指定要使用的驱动程序,在这种情况下:
providerName="Npgsql" />

但是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 开发服务器,而不是 IIS。最初我认为这可能是问题所在,但this forum post 建议并非如此。

【问题讨论】:

    标签: asp.net postgresql connection-string


    【解决方案1】:

    你需要下载和配置你的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>
    

    【讨论】:

    • 我已经几乎完全按照你在这里的建议进行了尝试,但没有任何效果。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2022-06-11
        • 1970-01-01
        • 1970-01-01
        • 2010-11-02
        • 1970-01-01
        • 1970-01-01
        • 2018-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多