Si è verificato un errore durante il tentativo di connessione a un database Oracle 10g remoto da un'applicazione C# 2008 Express Edition che sto sviluppando. Sto cercando di utilizzare un approccio minimalista e non intrusivo allo sviluppo in vista della distribuzione ClickOnce sulle workstation degli utenti.Errore durante il tentativo di connessione al database Oracle 10g dal programma C# con configurazione di configurazione minima
Per quanto riguarda quanto sopra ho studiato i seguenti documenti (tra gli altri ..) -
What is the minimal setup required to deploy a .NET application with Oracle client 11?
http://jeremybranham.wordpress.com/2011/04/25/oracle-instant-client-with-odp-net/
http://ora-00001.blogspot.com/2010/01/odpnet-minimal-non-intrusive-install.html
http://splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c
Connect to Oracle with odp.net and the OCI from C#
In considerazione dell'errore che ho riscontrato, ho creato una semplice app di test. composto da una singola pagina (wpf) con un solo pulsante. In click-evento del pulsante tento di creare una connessione a un database Oracle -
private void button1_Click(object sender, RoutedEventArgs e)
{
OracleConnection oraConnect;
// string previously used OK in other projects
string connectionString = "Data Source=" +
"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = myServer)(PORT = 1521)))" +
"(CONNECT_DATA =(SERVICE_NAME = myOracleDb)))" +
";Password=myPw;User ID=myID;";
using (oraConnect = new OracleConnection(connectionString))
{
try
{
if (oraConnect.State == ConnectionState.Closed)
{
oraConnect.Open();
MessageBox.Show("oraConnect is attempting to open..");
}
else
MessageBox.Show("oraConnect open to DB: " + oraConnect.ServerVersion.ToString());
}
catch (NullReferenceException nullExcept)
{
MessageBox.Show("Caught error: ." + nullExcept.ToString());
}
catch (OracleException dbEx)
{
MessageBox.Show("OraException - " + dbEx.Message.ToString());
}
catch (Exception ex)
{
Exception current;
current = ex;
while (current != null)
{
current = current.InnerException;
}
MessageBox.Show("Db base exception - " + ex.GetBaseException().ToString());
}
finally
{
oraConnect.Close();
}
}
}
seguito le informazioni negli articoli precedenti ho assicurato che di quanto segue DLL sono nella mia cartella "bin" -
• oci.dll
• Ociw32.dll
• orannzsbb10.dll
• oraocci10.dll
• oraociicus.dll
• Msvcr71.dll
(l'ultimo chiamato in disperazione ...) e hanno fatto riferimento a 'Oracle.DataAccess.dll'.
Il messaggio di errore (a 'catch (OracleException DBEX)') è -
"Oracle.DataAccess.Client.OracleException was caught
Message=""
StackTrace:
at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure)
at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src)
at Oracle.DataAccess.Client.OracleConnection.Open()
at OracleConnectionTest.Window1.button1_Click(Object sender, RoutedEventArgs e) in C:\Documents\Visual Studio 2008\Projects\OracleConnectionTest\OracleConnectionTest\Window1.xaml.cs:line 69
InnerException: "
Line 69 is 'oraConnect.Open();'.
Inoltre, viene segnalato il seguente -
"((Oracle.DataAccess.Client.OracleException)($exception)).DataSource' threw an exception of type 'System.NullReferenceException".
Sto assumendo dal NullReferenceException all'interno del datasource che il problema si trova in una delle DLL '(?) come' nuovo 'l'OracleConnection sopra prima di provare a farvi riferimento.
Inoltre, l'esecuzione del codice salta il "catch (NullReferenceException nullExcept)" e passa direttamente al catch OracleException.
Ci scusiamo per il vagabondaggio ma spero che abbia senso? Qualsiasi aiuto/consiglio apprezzato!
Can voi ping 'myServer'? hai provato a collegarti tramite sqlplus? – V4Vendetta
È possibile eseguire il tnsping di "myOracleDb"? – Shai
La 'NullReferenceException' non è la causa del problema. Si verifica quando si ispeziona l'eccezione in VisualStudio. È un artefatto di debug e può essere ignorato. Sfortunatamente, la vera eccezione sembra non contenere alcun messaggio di errore. O l'hai trascurato da qualche parte? – Codo