我有一个现有的ASP.NET应用程序,它配置为连接到MS SQL Server数据库,我正在尝试修改它以使用postgres数据库。
如果可能的话,我想避免修改C#代码。
我预计以下更改就足够了:
NauckIT.PostgreSQLProvider.dll
provider
标记以指定要使用的驱动程序,在本例中为:<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建议不这样做。
答案 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连接。然后,您可以使用此命名连接来访问您的数据库。