2016-07-08 13 views
-1

In einigen Servern erhalten folgende Fehler:OleDBProvider, db2, E_FAIL (0x80004005)

'IBMDADB2' failed with no error message available, 
     result code: E_FAIL(0x80004005).  
    at System.Data.OleDb.OleDbDataReader.ProcessResults(OleDbHResult hr) 
    at System.Data.OleDb.OleDbDataReader.BuildSchemaTableRowset(Object handle) 
    at System.Data.OleDb.OleDbDataReader.GenerateSchemaTable(
    OleDbDataReader dataReader, Object handle, CommandBehavior behavior) 
    at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 
    behavior, String method) 
    at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) 
    at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(
    CommandBehavior behavior) 
    at System.Data.Common.DbDataAdapter.FillSchemaInternal(DataSet dataset, 
    DataTable datatable, SchemaType schemaType, IDbCommand command, 
    String srcTable, CommandBehavior behavior) at 
    System.Data.Common.DbDataAdapter.FillSchema(DataSet dataSet, 
    SchemaType schemaType, IDbCommand command, String srcTable, CommandBehavior behavior) 
    at System.Data.Common.DbDataAdapter.FillSchema(DataSet dataSet, 
    SchemaType schemaType) 
    at BusinessLogiс.DB2.Database.GetData(String query, 
    String database, String host, String port, String login, String password) 

GetData Methode:

public static DataTable GetData(string query, string database, 
      string host, string port, string login, string password) 
    { 
     OleDbConnection connection = null; 
     try 
     { 
      connection = Connection.GetConnection(database, host, port, login, password); 
      OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connection); 
      DataSet dataSet = new DataSet(); 
      dataAdapter.FillSchema(dataSet, SchemaType.Mapped); 
      dataAdapter.Fill(dataSet); 

      return dataSet.Tables[0]; 
     } 
     finally 
     { 
      Connection.CloseConnection(connection); 
     } 
    } 

Connection:

connectionString = string.Format("Provider=IBMDADB2; 
        Database={0};Hostname={1}; 
        Protocol=TCPIP;Port={2}; 
        Uid ={3};Pwd={4};", 
        database, host, port, login, password); 
+0

Haben Sie eine Linie benutzen gelöscht ** offen ** Ihre Verbindung? – lokusking

Antwort

0

ich Sie

dataAdapter.FillSchema(dataSet, SchemaType.Mapped); 
0

Vergessen Sie nicht, um die Verbindung zu öffnen.

FillSchema ist nicht wirklich notwendig, wenn Sie nur Ihre Datenbank abfragen und aktualisieren möchten.

Sie können idb2connexion, idb2dataadapter in ADO.NET, seine besser

Example here