连接到PostgreSQL数据库失败

时间:2013-10-02 10:33:32

标签: c# postgresql

我目前正在开发 3.5 .NET C#项目。它使用一个外部程序,在我构建和运行它时接受一个参数。外部程序用于索引结构化或非结构化数据源。

C#项目是一个简单.dll ,它覆盖了一些外部程序方法。在初始化部分,我确实要求连接到我的 postgreSQL DB 以获取唯一ID。

警告:索引器和我的数据库没有链接,索引器可以使用.xls文件或mysql数据库索引文件夹。我的PostgreSQL只是为了带来一个唯一的ID并存储一些重要的信息

我的问题是当我作为外部程序启动 DBConnector这是一个32位索引器时,一切顺利。

当我启动 AlfrescoConnector这是一个64位索引器时,我无法打开我的postgreSQL数据库。

我把x86& x64类型的连接器,但我不知道问题是否来自那里。

我正在开发 Visual 2012 ,我的调试设置为生成x86兼容程序(将其更改为“任何CPU”或“x64”无法解决问题)

我使用的db对象是DbClient,这是一种在Internet上找不到的特定方法,因为它来自外部程序引用,但它可以作为经典的DbConnector。

我的DbClient对象如下所示:

  • dbClient = {Sinequa.Common.DbClient}
    • _CurrentTransaction = null
    • ConnectionString =“Server = localhost; Port = 5444; User Id = USERSAMPLE; Database = DBSAMPLE; Password = PWDSAMPLE;”
    • DbCn = null
    • DbCnSubSelect = null
    • DbFactory = null
    • DbIsolationLevel =未指定
    • DefaultCommandBehavior = SequentialAccess
    • Engine = Postgres
    • 错误= 0
    • ErrorText = null
    • LastRowAffected = 0
    • LOBFetchSize = 0
    • Provider =“Npgsql”
    • RefreshCount = 0
    • RefreshCurrent = 0
    • 架构= null

当我与Alfresco一起myDbClient.Open()

时出现错误

有什么建议吗?需要更多细节?我准备好和你的同伴一起解决这个痛苦的错误!

1 个答案:

答案 0 :(得分:1)

Alfresco x64位连接器使用.NET配置文件的x64位。配置文件位于:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.conf
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.conf
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.conf
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.conf

请记住,问题是缺少的提供商。因此,要解决此问题,您必须在DbProviderFactories标记之间插入缺少的提供程序,如下所示:

<DbProviderFactories>
  <add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
  <add name="OleDb Data Provider" invariant="System.Data.OleDb" description=".Net Framework Data Provider for OleDb" type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
  <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
  <add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
  <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Framework Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.13.91, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>
  <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
  <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>

下次DbClient尝试打开数据库并获取被询问的提供者时,使用此插入,它将成功。