2017-05-18 3 views
0

Ich bin Anfänger über Web-Programmierung und ich habe ein Problem mit Oracle DB-Verbindung. Mein Code funktioniert gut mit Mssql, aber es funktioniert nicht mit Oracle. Ich möchte db zu Oracle von mssql ändern. Ich habe odac heruntergeladen. Hier ist meine SqlOperations-Klasse.Oracle Datenbankverbindung

using System; 
using System.Collections.Generic; 
using System.Data; 
using Oracle.DataAccess; 
using System.Data.OracleClient; 
using System.Data.Odbc; 
using System.Linq; 
using System.Web; 

namespace BagciEmlak 
{ 
public class SqlOperations 
{ 
    OracleConnection con; 
    OracleCommand cmd; 
    OracleDataAdapter sda; 
    DataTable dt; 
    public OracleConnection OracleConnect() 
    { 
     try 
     { 
      con = new OracleConnection ("Data Source=SYS-CDB12c; User ID=HR; Password=hr; Unicode=true;"); 
      con.Open(); 
      return con; 
     } 
     catch (OracleException e) 
     { 

      throw; 
     } 

    } 
    public int Command(string ConStr, OracleConnection conn) 
    { 
     try 
     { 
      cmd = new OracleCommand(ConStr, conn); 

      return cmd.ExecuteNonQuery(); 
     } 
     catch (Exception e) 
     { 

      throw; 
     } 
     finally 
     { 
      cmd.Dispose(); 
      conn.Close(); 
      conn.Dispose(); 
     } 


    } 
    public DataTable GetDataTable(string ConStr, OracleConnection conn) 
    { 
     try 
     { 
      dt = new DataTable(); 
      sda = new OracleDataAdapter(ConStr, conn); 
      sda.Fill(dt); 

      return dt; 
     } 
     catch (Exception e) 
     { 

      throw; 
     } 
     finally 
     { 
      sda.Dispose(); 
      conn.Close(); 
      conn.Dispose(); 
     } 

    } 
    public DataRow GetDataRow(string ConStr, OracleConnection conn) 
    { 
     dt = GetDataTable(ConStr, conn); 
     if (dt.Rows.Count==0) 
     { 
      return null; 
     } 
     else 
     { 
      return dt.Rows[0]; 
     } 
    } 
    public string GetDataCell(string ConStr, OracleConnection conn) 
    { 
     dt = GetDataTable(ConStr, conn); 
     if (dt.Rows.Count == 0) 
     { 
      return null; 
     } 
     else 
     { 
      return dt.Rows[0][0].ToString(); 
     } 
    } 

} 

}

und hier ist mein webconfig Code:

<connectionStrings> 
    <add name="{ConnectionName}" 
    connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=HR;Password=HR;" 
    providerName="Oracle.DataAccess.Client"/> 
</connectionStrings> 

So falsch was innerhalb können Sie mir helfen

+0

Wird ein Fehler angezeigt? Erhalten Sie unerwartete Ergebnisse? –

+0

Wenn ich kompiliere gibt es keinen Fehler, aber in Chrome habe ich gesehen, dass: Server Fehler in '/' Anwendung. Die Datei 'Oracle.DataAccess' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden. –

+0

'System.Data.OracleClient' ist veraltet. Benutze es nicht. Verwenden Sie den [Oracle Managed Client] (https://www.nuget.org/packages/Oracle.ManagedDataAccess/). Und speichern Sie Ihre [IDiposable] (https://msdn.microsoft.com/en-us/library/system.idisposable (v = vs.110) .aspx) (OracleConnection) -Objekte nicht als Felder. Und warum verwenden Sie DataTable anstelle von stark typisierten Objekten? – mason

Antwort

1

Gerade Parameter ändern in OracleConnection zu

SERVER = (BESCHREIBUNG = (ADRESSE = (PROTOCOL = TCP) (HOST = SYS-CDB12c) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NA ME = MyOracleSID))); uid = HR; pwd = hr;

Ändern Sie auch myOracleSID in den Namen Ihrer Oracle-Datenbankinstanz.

In Ihrem Fall betrifft Verbindungszeichenfolge in web.config Ihre Verbindung nicht. Weil Sie die Verbindung als String-Parameter ohne Konfigurationsmanager übergeben.

+0

Ich habe alle, aber diesen Fehler nicht gelöst. Dann fand ich sein ungefähr 32 Bit/64bit Problem. Wenn ich Platform Target x86-Format ändere, löst dieser Fehler wahrscheinlich. Aber jetzt nehme ich diese Ausnahme: System.NullReferenceException: 'Objektreferenz nicht auf eine Instanz eines Objekts gesetzt. Hast du eine Ahnung davon? Ich habe meinen Benutzernamen und PW überprüft, aber es ist wahr ... –

+0

Bitte zeigen Sie mir Stack-Trace Ihrer Ausnahme. –

+0

Hier ist mein Stapel Trace-Bericht [imgur] (http://imgur.com/a/BMqOu) –

Verwandte Themen