2

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

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

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

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

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

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

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

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

我的 DbClient 对象如下所示:

  • dbClient = {Sinequa.Common.DbClient}
    • _CurrentTransaction = null
    • ConnectionString = "服务器=本地主机;端口=5444;用户 ID=USERSAMPLE;数据库=DBSAMPLE;密码=PWDSAMPLE;"
    • DbCn = 空
    • DbCnSubSelect = null
    • 数据库工厂 = 空
    • DbIsolationLevel = 未指定
    • DefaultCommandBehavior = 顺序访问
    • 引擎 = Postgres
    • 错误 = 0
    • 错误文本 = 空
    • LastRowAffected = 0
    • LOBFetchSize = 0
    • 提供者 = "Npgsql"
    • 刷新计数 = 0
    • 刷新电流 = 0
    • 架构 = 空

当我myDbClient.Open()使用 Alfresco时出现错误

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

4

1 回答 1

2

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 将尝试打开数据库并获取所要求的提供程序,它将成功。

于 2013-10-03T07:56:21.540 回答