2013-10-02 153 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將嘗試打開數據庫並獲得詢問提供商,它會成功。