2013-10-02 104 views
1

我目前正在研究一个3.5 .NET C#项目。它使用一个外部程序,在构建和运行它时接受一个参数。外部程序用于索引结构化或非结构化数据源。与PostgreSQL数据库故障的连接

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

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

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

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

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

我对视觉2012,我调试工作设置产生x86兼容程序(将其更改为“任何CPU”或“64”不解决问题)

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

我dbclient中物体看起来是这样的:

  • 与dbclient = {Sinequa.Common。与dbclient}
    • _CurrentTransaction = NULL
    • 的ConnectionString = “服务器=本地主机,端口= 5444;用户ID = USERSAMPLE;数据库= DBSAMPLE;密码= PWDSAMPLE;”
    • DbCn = NULL
    • DbCnSubSelect = NULL
    • DbFactory = NULL
    • DbIsolationLevel =未指定
    • DefaultCommandBehavior = SequentialAccess
    • 引擎= Postgres的
    • 误差= 0
    • ERRORTEXT = NULL
    • LastRowAffected = 0
    • LOBFetchSize = 0
    • 提供商= “Npgsql的”
    • RefreshCount = 0
    • RefreshCurrent = 0
    • 模式= NULL

当我做​​与Alfresco的一个错误来

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

+0

检查由名为Alfresco的连接器生成的日志文件,我成功地区分了问题的根源: “DbClient.Open错误:无法找到请求的.Net Framework数据提供程序,它可能未安装。 我目前使用的是Npgsql。 正在引用Npgsql会将缺少的信息直接包含到连接器中吗? 我会在我身边做实验,但随时可以为此主题添加一些有价值的答案。 – h0007

回答

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将尝试打开数据库并获得询问提供商,它会成功。