Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
配置ASP.NET开发服务器以连接到postgres数据库_Asp.net_Postgresql_Connection String - Fatal编程技术网

配置ASP.NET开发服务器以连接到postgres数据库

配置ASP.NET开发服务器以连接到postgres数据库,asp.net,postgresql,connection-string,Asp.net,Postgresql,Connection String,我有一个现有的ASP.NET应用程序,它被配置为连接到MS SQL Server数据库,我正在尝试将其修改为使用postgres数据库 如果可能的话,我希望避免修改C代码 我预计以下更改就足够了: 添加对合适的postgres驱动程序的引用,在本例中是NauckIT.PostgreSQLProvider.dll 添加provider标记以指定要使用的驱动程序,在这种情况下: 看起来它仍在尝试使用MS SQL Server驱动程序 我如何说服它不要这样做 我使用的是ASP.NET开发服务器,而不是

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

如果可能的话,我希望避免修改C代码

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

  • 添加对合适的postgres驱动程序的引用,在本例中是
    NauckIT.PostgreSQLProvider.dll
  • 添加
    provider
    标记以指定要使用的驱动程序,在这种情况下:
  • 看起来它仍在尝试使用MS SQL Server驱动程序

    我如何说服它不要这样做


    我使用的是ASP.NET开发服务器,而不是IIS。起初,我认为这可能是问题所在,但提出了相反的建议。

    这本非常棒的书给出了各种连接字符串的示例,您的看起来还可以。不幸的是,您的代码使用的是SqlClient,它是.Net中仅有SqlServer的数据库访问。您将不得不破解一些代码…

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

    您需要下载并配置PostgreSQL ADO.Net连接驱动程序,有几种方法可以实现此目的,最常用的是Npgsql(),请先下载驱动程序。(下载新的Npgsql2!)

    确保将正确的DbProvider用作Npgsql2

    确保引用中包含Npgsql2提供程序(无论如何,您可以将其添加到web.config):

    
    
    确保按预期安装了Npgsql2数据提供程序:(可以将其添加到web.config文件):

    
    
    像往常一样添加连接字符串:

    <connectionStrings>
     <add name="Blog"
          connectionString="SERVER=localhost;Database=blogstarterkit;User name=test;Password=test" 
          providerName="Npgsql2"/> <!-- provider invariant name, configured above -->
    </connectionStrings>
    

    我已经尝试了几乎完全符合您建议的方法,但没有效果。
    [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
    
    <system.web>
     <compilation>
      <assemblies>
       <add assembly="Npgsql2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>
      </assemblies>
     </compilation>
    </system.web>
    
    <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>