2

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

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

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

  1. 在这种情况下,添加对合适的 postgres 驱动程序的引用NauckIT.PostgreSQLProvider.dll
  2. 添加一个provider标签来指定要使用的驱动程序,在这种情况下:
   <连接字符串>
     <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 开发服务器,而不是 IIS。最初,我认为这可能是问题所在,但此论坛帖子另有建议。

4

3 回答 3

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>
于 2009-02-13T05:18:58.750 回答
1

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

于 2009-02-12T12:33:37.873 回答
0

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

于 2009-02-12T12:49:24.417 回答